Почему внутри libc ++ std :: vector хранятся три указателя вместо одного указателя и два размера?

Я смотрю на реализациюstd::vector в libc ++, и я заметил, что он внутренне сохраняет три указателя (один на начало, один на конец и один на конец выделенной памяти) вместо того, что я инстинктивно делал, то есть один указатель на начало и дваsize а такжеcapacity члены.

Вот код из libc ++<vector> (игнорировать сжатую пару, я знаю, что это значит).

pointer                                    __begin_;
pointer                                    __end_;
__compressed_pair<pointer, allocator_type> __end_cap_;

Я заметил, что и другие стандартные библиотеки делают то же самое (например, Visual C ++). Я не вижу какой-либо конкретной причины, почему это решение должно быть быстрее, чем другое, но я могу ошибаться.

Так есть ли конкретная причина, по которой решение «три указателя» предпочтительнее решения «указатель + размеры»?

Ответы на вопрос(3)

Ваш ответ на вопрос