Читать «Стандарты программирования на С++. 101 правило и рекомендация» онлайн - страница 122
Андрей Александреску
76. По умолчанию используйте vector
. В противном случае выбирайте контейнер, соответствующий задаче
Резюме
Очень важно использовать "правильный контейнер". Если у вас есть весомые причины выбрать определенный тип контейнера, используйте тот контейнер, который наиболее подходит для вашей задачи.
Если конкретных предпочтений нет, возьмите vector
и спокойно работайте, зная, что вы сделали верный выбор.
Обсуждение
Ниже представлены три главных аспекта, которые касаются программирования вообще, и выбора контейнера в частности.
• vector
, list
). Если вам нужен итератор произвольного доступа, выберите vector
, deque
или string
. Если нужен словарный поиск наподобие c[0]=42;
, воспользуйтесь ассоциативным контейнером (например, set
, map
) — но если вам требуется упорядоченная ассоциативная коллекция, то вы не можете использовать контейнеры с использованием хеширования (нестандартные hash_
… или стандартные unordered_
… контейнеры).
• hash_
… или стандартными unordered_
… контейнерами), затем — отсортированным vector
, затем — set
или map
, обычно в приведенном порядке. Даже в этой ситуации отличия асимптотического времени работы (с использованием "большого
• list
, set
, map
).
В противном случае следуйте совету Стандарта: "vector
представляет собой тип последовательности, который нужно использовать по умолчанию" ([C++03] §23.1.1).
Если вы сомневаетесь в данном совете, спросите сами себя — действительно ли у вас есть непреодолимые причиныvector
, который обладает следующими свойствами.