Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::vector和std::deque之间的大小差异_C++_Vector_Stl_Size_Deque - Fatal编程技术网

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

C++ std::vector和std::deque之间的大小差异,c++,vector,stl,size,deque,C++,Vector,Stl,Size,Deque,在我声明了一个vector和一个deque之后,如果我在它们上面打印出sizeof,那么std::vector有12个字节(我猜是开始、结束和大小),而deque有40个字节。这些额外的字节是从哪里来的 我使用的是code::Blocks IDE 13.12,我确实选择了要使用的C++11标准。操作符sizeof获取对象的大小,而不是其内容的大小 因此,如果一个对象有三个数据成员变量,sizeof操作符将获得这些成员变量的大小,但是如果其中一个是指向更多数据的指针,那么您只获得指针的大小,而不是

在我声明了一个
vector
和一个
deque
之后,如果我在它们上面打印出
sizeof
,那么
std::vector
有12个字节(我猜是开始、结束和大小),而
deque
有40个字节。这些额外的字节是从哪里来的


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

操作符
sizeof
获取对象的大小,而不是其内容的大小


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

sizeof不提供容器中元素的数量;而是编译时评估的结构大小


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

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


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

这就是我要问的。为什么向量的大小是3字节,而是一个DEQE 10字节的大小?@ USE1640736,容器对象的内部数据要达到实现,C++规范不涉及成员变量,只说明类应该如何操作。此刻我正试图查看实现,但我几乎不明白一件事…@user1640736不要查看实现,只阅读文档(如)。实现并不是真正需要考虑的,而且它在不同的标准库实现之间会有所不同。它也将非常复杂,不打算用作参考(使用a)。为什么不在编译器的
标题中浏览一下并找出答案呢?嗯……:对不起,由于某种原因被简化为4。@PaulMcKenzie,因为许多实现的
std
标题的内容都是令人厌恶的,任何人都不应该被强迫阅读。@PaulMcKenzie我正在尝试查看实现,但我没有意识到区别:(