Контейнеры (современный C++)
По умолчанию следует использовать вектор как последовательный контейнер по умолчанию в C++. Это эквивалент List<T> на других языках.
vector<string> v;
v.push_back( "Geddy Lee" );
Используйте map (не unordered_map) в качестве ассоциативного контейнера по умолчанию. Используйте set, multimap, multiset для вырожденных и множественных случаев.
map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";
Если необходима оптимизация производительности, можно использовать:
тип массива при внедрении очень важен, например как член класса.
неупорядоченные ассоциативные контейнеры (unordered_map, et al.). Понизьте рабочей нагрузки для каждого элемента (главную) и поиска константа- времени (потенциально главный, иногда (значительные). Более крепко правильного использования и эффективно, из-за неудобств и изображений краев.
сортируемый вектор. (См. Алгоритмы).
Не используйте массивы C. (Для более старых API используйте f( vec.data(), vec.size() );.)
Для другой статьи о контейнерах см. в разделе Контейнеры STL.
Размеры контейнеров
В следующей таблице показаны размеров контейнера, в байтах, для платформы x86 и x64. (32-разрядная ARM-архитектура эквивалентна x86 для этих целей.) Режим выпуска описания этих таблиц, поскольку режим отладки содержит проверку машинного оборудования, которое требует времени и места. Отдельные столбцы для Visual C++ 2008 SP1, где _SECURE_SCL не было выполнено по умолчанию устанавливается в 1, а для Visual C++ 2008 SP1 с _SECURE_SCL вручную значение 0 для максимальной скорости. В Visual C++ в Visual Studio 2010, Visual C++ в Visual Studio 2012 и Visual C++ в Visual Studio 2013 по умолчанию _SECURE_SCL равно 0 (теперь называется _ITERATOR_DEBUG_LEVEL).
x86 размеров контейнера (байт) |
VC9 с пакетом обновления 1 (SP1) |
VC9 с пакетом обновления 1 (SP1) SCL=0 |
VC10 |
VC11 |
---|---|---|---|---|
vector<int> |
24 |
16 |
16 |
12 |
array<int, 5> |
20 |
20 |
20 |
20 |
вывести из очереди <int> |
32 |
32 |
24 |
20 |
forward_list<int> |
Недоступно |
Недоступно |
8 |
4 |
list<int> |
28 |
12 |
12 |
8 |
priority_queue<int> |
28 |
20 |
20 |
16 |
queue<int> |
32 |
32 |
24 |
20 |
stack<int> |
32 |
32 |
24 |
20 |
pair<int, int> |
8 |
8 |
8 |
8 |
tuple<int, int, int> |
16 |
16 |
16 |
12 |
map<int, int> |
32 |
12 |
16 |
8 |
multimap<int, int> |
32 |
12 |
16 |
8 |
set<int> |
32 |
12 |
16 |
8 |
multiset<int> |
32 |
12 |
16 |
8 |
hash_map<int, int> |
72 |
44 |
44 |
32 |
hash_multimap<int, int> |
72 |
44 |
44 |
32 |
hash_set<int> |
72 |
44 |
44 |
32 |
hash_multiset<int> |
72 |
44 |
44 |
32 |
unordered_map<int, int> |
72 |
44 |
44 |
32 |
unordered_multimap<int, int> |
72 |
44 |
44 |
32 |
unordered_set<int> |
72 |
44 |
44 |
32 |
unordered_multiset<int> |
72 |
44 |
44 |
32 |
string |
28 |
28 |
28 |
24 |
wstring |
28 |
28 |
28 |
24 |
x64 размеров контейнера (байт) |
VC9 с пакетом обновления 1 (SP1) |
VC9 с пакетом обновления 1 (SP1) SCL=0 |
VC10 |
VC11 |
---|---|---|---|---|
vector<int> |
48 |
32 |
32 |
24 |
array<int, 5> |
20 |
20 |
20 |
20 |
вывести из очереди <int> |
64 |
64 |
48 |
40 |
forward_list<int> |
Недоступно |
Недоступно |
16 |
8 |
list<int> |
56 |
24 |
24 |
16 |
priority_queue<int> |
56 |
40 |
40 |
32 |
queue<int> |
64 |
64 |
48 |
40 |
stack<int> |
64 |
64 |
48 |
40 |
pair<int, int> |
8 |
8 |
8 |
8 |
tuple<int, int, int> |
16 |
16 |
16 |
12 |
map<int, int> |
64 |
24 |
32 |
16 |
multimap<int, int> |
64 |
24 |
32 |
16 |
set<int> |
64 |
24 |
32 |
16 |
multiset<int> |
64 |
24 |
32 |
16 |
hash_map<int, int> |
144 |
88 |
88 |
64 |
hash_multimap<int, int> |
144 |
88 |
88 |
64 |
hash_set<int> |
144 |
88 |
88 |
64 |
hash_multiset<int> |
144 |
88 |
88 |
64 |
unordered_map<int, int> |
144 |
88 |
88 |
64 |
unordered_multimap<int, int> |
144 |
88 |
88 |
64 |
unordered_set<int> |
144 |
88 |
88 |
64 |
unordered_multiset<int> |
144 |
88 |
88 |
64 |
string |
40 |
40 |
40 |
32 |
wstring |
40 |
40 |
40 |
32 |