Partager via


Conteneurs (Modern C++)

Par défaut, utilisez vecteur comme conteneur séquentiel par défaut dans C++. C'est l'équivalent de List<T> dans d'autres langages.

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

Utilisez carte (pas unordered_map) comme conteneur associatif par défaut. Utilisez set, multimap, multiset pour plusieurs cas & dégénérés.

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

Lorsque l'optimisation des performances est nécessaire, envisagez l'utilisation :

  1. le type de tableau lorsque l'incorporation est importante, par exemple en tant que membre de classe.

  2. conteneurs associatifs non classés (unordered_map, et autres) : Charge mémoire inférieure de chaque élément (majeure) et recherche de constante (potentiellement majeure, parfois secondaire). Plus difficile à utiliser correctement et efficacement, en raison d'inconvénients et des bords tranchants.

  3. Vecteur trié. (Voir : Algorithmes.)

N'utilisez pas de tableaux C. (Pour les API plus anciennes, utilisez f( vec.data(), vec.size() ); .)

Pour un autre article sur les conteneurs, consultez Conteneurs STL.

Tailles de conteneur

Les tableaux suivants répertorient les tailles de conteneur, en octets, pour les plateformes x86 et x64. (À ces fins, ARM 32 bits est équivalent à x86 à ces fins). Ces tables couvrent le mode release, car le mode debug contient le mécanisme de vérification gourmand en espace et en temps. Les colonnes distinctes sont pour Visual C++ 2008 SP1, où _SECURE_SCL avait pour valeur par défaut 1, et pour Visual C++ 2008 SP1 avec _SECURE_SCL défini manuellement sur 0 pour une vitesse maximale. Visual C++ dans Visual Studio 2010, Visual C++ dans Visual Studio 2012 et Visual C++ dans Visual Studio 2013 ont par défaut _SECURE_SCL la valeur 0 (maintenant appelée _ITERATOR_DEBUG_LEVEL).

Tailles de conteneur x86 (octets)

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/A

N/A

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

Tailles de conteneur x64 (octets)

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/A

N/A

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

Voir aussi

Autres ressources

Bienvenue dans C++ (Modern C++)

Référence du langage C++

Référence de bibliothèque standard C++