STDLIB中容器元素类型的要求是什么?

时间:2018-05-31 05:56:46

标签: c++ c++11 containers

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

但是,还有其他要求,例如可分配吗?

作为补充,我记得有效STL 表示vector<bool>不是标准容器,因为它不符合T *p=&c[0]良好的要求 - 形成。

1 个答案:

答案 0 :(得分:4)

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

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

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

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

  •