Я смотрю на реализацию std::vector
в libС++, и я заметил, что он внутренне хранит три указателя (один для начала, один конец и один до конца выделенной памяти) вместо того, d инстинктивно, т.е. один указатель на начало и два члена size
и capacity
.
Вот код из libС++ <vector>
(игнорируйте сжатую пару, я знаю, что это значит).
pointer __begin_;
pointer __end_;
__compressed_pair<pointer, allocator_type> __end_cap_;
Я заметил, что и другие стандартные библиотеки делают то же самое (например, Visual С++). Я не вижу какой-либо особой причины, почему это решение должно быть быстрее, чем другое, но я могу ошибаться.
Так есть ли особая причина, что решение "трех указателей" предпочтительнее "указателя + размера"?