Compartilhar via


Contêineres (C++ moderno)

Por padrão, use vetor como o contêiner sequencial padrão em C++. Este é o equivalente de List<T> em outros idiomas.

vector<string> v;
v.push_back( "Geddy Lee" );

Use map (e não unordered_map) como o contêiner associativo padrão. Use set, multimap, multiset para degenerar & vários casos.

map<string, string> phone_book;
// ...
phone_book["Alex Lifeson"] = "+1 (416) 555-1212";

Quando a otimização de desempenho é necessária, considere usar:

  1. o tipo de matriz é importante na inserção - por exemplo, como um membro da classe.

  2. contêiner associativos não ordenada (unordered_map, entre outros): Mova a sobrecarga do elemento principal () e a pesquisa das constantes hora (possivelmente principal, às vezes menor). Para usar mais duramente corretamente e eficaz, devido a inconveniências e as bordas acutângulo.

  3. vetor classificada. (Consulte: Algoritmos.)

Não use matrizes do C. (Para as APIs mais antigas, use f( vec.data(), vec.size() ); .)

Para outro artigo sobre contêineres, consulte Contêineres da STL.

Tamanhos de contêiner

As tabelas a seguir mostram os tamanhos de contêiner, em bytes, para plataformas x86 e x64. (Para essas finalidades, o ARM de 32 bits é equivalente a x86.) Essas tabelas abordam o modo de versão porque o modo de depuração contém maquinário de verificação que consome espaço e tempo. As colunas são separadas para o Visual C++ 2008 SP1, onde _SECURE_SCL tem como padrão 1, e para Visual C++ 2008 SP1 com _SECURE_SCL definido manualmente como 0 para velocidade máxima. Visual C++ no Visual Studio 2010, Visual C++ no Visual Studio 2012 e Visual C++ no Visual Studio 2013 tem como padrão _SECURE_SCL a 0 (agora conhecido como _ITERATOR_DEBUG_LEVEL).

Tamanhos de contêiner x86 (bytes)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

24

16

16

12

array<int, 5>

20

20

20

20

deque<int>

32

32

24

20

forward_list<int>

N/D

N/D

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

cadeia de caracteres

28

28

28

24

wstring

28

28

28

24

Tamanhos de contêiner x64 (bytes)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

48

32

32

24

array<int, 5>

20

20

20

20

deque<int>

64

64

48

40

forward_list<int>

N/D

N/D

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

cadeia de caracteres

40

40

40

32

wstring

40

40

40

32

Consulte também

Outros recursos

Bem-vindo ao C++ (C++ moderno)

Referência de linguagem C++

Referência da Biblioteca Padrão C++