std :: vector和std :: deque之间的大小差异

时间:2015-03-16 19:45:17

标签: c++ vector stl size deque

在我声明vector<int>deque<int>之后,如果我在两者上打印sizeofstd::vector有12个字节(我猜是开始,结束和大小)而deque有40个字节。那些额外的字节来自哪里?

我正在使用Code::Blocks IDE 13.12,我确实选择了要使用的C++11标准。

3 个答案:

答案 0 :(得分:2)

大小取决于实现;但是像deque这样的更复杂结构的控制结构可能比像vector这样的简单结构(正如你所说,可以通过三个指针或指针轻松管理)这一点并不奇怪和两种尺寸)。

查看GNU实现,它存储了预先计算的“开始”和“结束”迭代器,可能是因为它们很难按需计算,并且在容器更改时更容易更新。每个都非常复杂,包含四个指针:当前位置,当前块的开始和结束,以及指向块之间移动所需的映射结构的指针。 deque还有一个(可能是多余的?)指向该地图的指针,以及大小(再次,可能很难按需计算),总共有十个指针/大小,正如您所观察到的那样。

答案 1 :(得分:1)

sizeof运算符采用对象的大小而不是其内容的大小。

因此,如果一个对象有三个数据成员变量,那么sizeof运算符将获得这些成员变量的大小,但如果其中一个是指向更多数据的指针,那么您只获得指针的大小和而不是它指向的数据的长度。

答案 2 :(得分:0)

sizeof不会为您提供容器中元素的数量;而编译时评估了结构的大小。

因此实际值取决于标准库的实现,因此,平台可能会有所不同。

相关问题