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