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

What are the requirements for container element type in STDLIB?

本文关键字:什么 类型 元素 STDLIB      更新时间:2023-10-16

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

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

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

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

  • T 必须满足 CopyAssignable 和 CopyConstructable 的要求。 (至C++11(

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

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