容器(现代 C++)

默认情况下,将向量作为 C++ 中的默认顺序容器使用。 这相当于其他语言的列表<T>。

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

使用 map(不是 unordered_map)作为默认关联容器。 将设置多重映射多集用于退化和多用例。

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

需要性能优化时,请考虑使用:

  1. 正在嵌入(例如作为类成员)的数组类型很重要。

  2. 无序的关联容器 (无序的映射,等等):降低各元素的开销 (主要) 和常数时查找 (可能是主要,有时次要)。 由于不便和锋利的边缘,更加难以正确且有效地使用。

  3. 已排序的矢量。(请参见:算法。)

不要使用 C 数组。(对于较早的 API,使用 f( vec.data(), vec.size() );。)

有关容器的另外一篇文章信息,请参见STL 容器

容器大小

下表显示了容器的大小,以字节为单位,适用于 x86 和 x64 平台。(出于这些目的,32 位 ARM 与 x86 等效。)这些表涉及释放模式,因为调试模式包含消耗空间和时间的检查机械设备。这些单独的列针对的是 Visual C++ 2008 SP1,其中 _SECURE_SCL 默认为 1,同时也将针对 _SECURE_SCL 手动设置为 0 以达到最大速度的 Visual C++ 2008 SP1。Visual Studio 2010 中的 Visual C++、Visual Studio 2012 中的 Visual C++ 和 Visual Studio 2013 中的 Visual C++ 将 _SECURE_SCL 默认为 0(现在称为 _ITERATOR_DEBUG_LEVEL)。

x86 容器大小(字节)

VC9 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

24

16

16

12

数组 <int, 5>

20

20

20

20

deque<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 SP1

VC9 SP1

SCL=0

VC10

VC11

vector<int>

48

32

32

24

数组 <int, 5>

20

20

20

20

deque<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

请参见

其他资源

欢迎回到 C++(现代 C++)

C++ 语言参考

C++ 标准库参考