STDLIB 中容器元素类型有哪些要求?

big*_*iao 1 c++ containers c++11

我知道的一件事可能不是真的,那就是T应该是可复制构造的,也就是说,T应该有一个可访问的复制构造函数。

但是,是否还有其他要求,例如副本可分配

作为补充,我记得Effective STLvector<bool>不是标准容器,因为它不满足T *p=&c[0]格式良好的要求。

cod*_*707 5

我认为序列容器和关联容器有不同的要求。例如,以下是矢量(有关更多详细信息,请参阅 cppreference.com)。另请注意,新版本的 c++ 已对其进行了更改。

  • T必须满足CopyAssignable和CopyConstructible的要求。(直到 C++11)

  • 对元素施加的要求取决于对容器执行的实际操作。一般要求元素类型是完整类型并满足Erasable的要求,但很多成员函数提出了更严格的要求。(自 C++11 起)(直到 C++17)

  • 对元素施加的要求取决于对容器执行的实际操作。一般来说,要求元素类型满足Erasable的要求,但许多成员函数提出了更严格的要求。如果分配器满足分配器完整性要求,则可以使用不完整的元素类型实例化此容器(但不是其成员)。(自 C++17 起)

  • @bigxiao 如果是的话,它们就不会是两个不同的概念了。有了“CopyInsertable”概念,分配器就开始发挥作用。有关一些详细信息,请参阅此答案:/sf/answers/1044129971/。 (3认同)