STL容器尺寸要求

时间:2016-11-03 14:46:41

标签: c++ stl

对STL容器sizeof有什么要求吗?例如,我可以使用std::list实现Node,如下所示:

struct Node
{
    Node* left;
    Node* right;
    T value;
};

并存储Node的两个指针或对象,如:

Node* m_head;
Node* m_tail;

Node m_head;
Node m_tail;

考虑到值类型T可能很大,sizeof的{​​{1}}可能非常大。可以接受吗?

3 个答案:

答案 0 :(得分:2)

标准中没有要求容器的尺寸应该是多少。标准细节是什么,数据结构的行为是什么。它还详细说明了对其及其成员函数所执行操作的复杂性。这反过来可能会限制您设计它的方式以符合这些要求,但如果您能够以不同的方式弄清楚如何维护这些要求,那么标准允许这样做。

答案 1 :(得分:2)

对容器内存占用没有特别限制,但容器无法按照您的建议实施。

因为容器构造函数不知道 1 如何构造T类型的对象,所以不能是{{1}类型的任何(嵌套)成员}}

1 具有元素类型默认构造函数或复制构造函数是某些容器操作的要求,但标准并不要求T或{{1}所以实现不得不这样做。

std::list constructor semantics

答案 2 :(得分:1)

除了明确禁止sizeof为零的C ++标准(否则指针算法会破坏),C ++标准库实现可以将容器sizeof设置为它选择的任何东西。

进一步注意,例如,对于不同类型sizeof(std::list<T>)sizeof(std::list<Y>)T不一定必须与Y相同。