Читать «Стандарты программирования на С++. 101 правило и рекомендация» онлайн - страница 123
Андрей Александреску
• Гарантирует минимальные среди всех контейнеров накладные расходы памяти на хранение (ноль байтов на объект).
• Гарантирует наивысшую среди всех контейнеров скорость доступа к хранимым элементам.
• Гарантирует локальность ссылок, означающую, что объекты, находящиеся рядом друг с другом в контейнере, гарантированно находятся рядом и в памяти, что не гарантирует ни один другой контейнер.
• Гарантирует совместимость размещения в памяти с размещением, используемым языком программирования С, в отличие от остальных стандартных контейнеров (см. рекомендации 77 и 78).
• Гарантирует наличие самых гибких итераторов (произвольного доступа).
• Почти гарантированно имеет самые быстрые итераторы (указатели или классы со сравнимой производительностью, которые зачастую работают в окончательной (не отладочной) версии с той же скоростью, что и указатели).
vector
и спокойно работайте, зная, что вы сделали верный выбор.
И последнее — лучше использовать контейнеры и алгоритмы стандартной библиотеки, а не стороннего производителя или разработанные самостоятельно.
Примеры
list
только потому, что "очевидно, что list
—подходящий тип для выполнения операций со списком", таких как вставка в средину последовательности. Тип vector
для небольших списков практически всегда превосходит тип list
. Несмотря на то, что вставка в средину последовательности требует линейного времени работы у vector
, и постоянного — у list
, вектор с небольшим количеством элементов обычно справляется с этой задачей быстрее — за счет меньшего постоянного множителя; преимущества асимптотического времени работы list
проявляются только при больших количествах элементов в контейнере.
Таким образом, используйте vector
, пока размеры данных не потребуют иного выбора (см. рекомендацию 7), либо пока не станет существенной обеспечение строгой гарантии безопасности при возможной генерации исключений копирующим конструктором или копирующим оператором присваивания типа объектов, хранящихся в контейнере. В последнем случае может оказаться важным, что контейнер list
обеспечивает строгую гарантию безопасности для операции вставки в коллекцию таких типов.
Ссылки
77. Вместо массивов используйте vector
и string
Резюме
Избегайте реализации абстракция массива посредством массивов в стиле С, арифметики указателей и примитивов управления памятью. Использование vector
или string
не только сделает проще вашу жизнь, но и позволит написать более безопасную и масштабируемую программу.