在我声明vector<int>
和deque<int>
之后,如果我在两者上打印sizeof
,std::vector
有12个字节(我猜是开始,结束和大小)而deque
有40个字节。那些额外的字节来自哪里?
我正在使用Code::Blocks IDE 13.12
,我确实选择了要使用的C++11
标准。
答案 0 :(得分:2)
大小取决于实现;但是像deque
这样的更复杂结构的控制结构可能比像vector
这样的简单结构(正如你所说,可以通过三个指针或指针轻松管理)这一点并不奇怪和两种尺寸)。
查看GNU实现,它存储了预先计算的“开始”和“结束”迭代器,可能是因为它们很难按需计算,并且在容器更改时更容易更新。每个都非常复杂,包含四个指针:当前位置,当前块的开始和结束,以及指向块之间移动所需的映射结构的指针。 deque
还有一个(可能是多余的?)指向该地图的指针,以及大小(再次,可能很难按需计算),总共有十个指针/大小,正如您所观察到的那样。
答案 1 :(得分:1)
sizeof
运算符采用对象的大小而不是其内容的大小。
因此,如果一个对象有三个数据成员变量,那么sizeof
运算符将获得这些成员变量的大小,但如果其中一个是指向更多数据的指针,那么您只获得指针的大小和而不是它指向的数据的长度。
答案 2 :(得分:0)
sizeof不会为您提供容器中元素的数量;而编译时评估了结构的大小。
因此实际值取决于标准库的实现,因此,平台可能会有所不同。