C++ 具名要求:容器 (Container)

< cpp‎ | named req
 
 
 

容器 (Container) 是用于存储其他对象并照顾管理其所容纳的对象所用的内存的对象。

要求

  • 容器类型 C
  • 元素类型 T
  • C 类型的对象 ab
  • rvC 类型右值表达式。

类型

名称 类型 注解
value_type T 可擦除 (Erasable)
reference T&
const_reference const T&
iterator 指向 T 的迭代器 遗留向前迭代器 (LegacyForwardIterator)
可转换为 const_iterator
const_iterator 指向 T 的常迭代器 遗留向前迭代器 (LegacyForwardIterator)
difference_type 有符号整数 必须与 iteratorconst_iteratoriterator_traits::difference_type 相同
size_type 无符号整数 足够大以表示 difference_type 的所有正值

方法与运算符

表达式 返回类型 语义 条件 复杂度
C() C 创建空容器 后:C().empty() == true 常数
C(a) C 创建 a 的副本 前:T 必须为可复制插入 (CopyInsertable)
后:a == C(a)
线性
C(rv)(C++11 起) C 移动 rv 后:等于 rv 在此构造前的值 常数[1]
a = b C& 销毁或从 b 的元素复制赋值 a 的所有元素 后:a == b 线性
a = rv C& 销毁或从 rv 的元素移动赋值 a 的所有元素 后: a 等于 rv 在此赋值前拥有的值 线性
a.~C() void 销毁 a 的所有元素并释放所有内存 线性
a.begin() (const_)iterator 指向 a 首元素的迭代器 常数
a.end() (const_)iterator 指向 a 尾元素后一位的元素 常数
a.cbegin()(C++11 起) const_iterator const_cast<const C&>(a).begin() 常数
a.cend()(C++11 起) const_iterator const_cast<const C&>(a).end() 常数
a == b 可转换为 bool std::equal(a.begin(), a.end(), b.begin(), b.end())(C++14 起) 前:T 必须可相等比较 (EqualityComparable) a.size() != b.size() 则为常数[2],否则为线性
a != b 可转换为 bool !(a == b) 线性
a.swap(b) void 交换 ab 的值 常数[1][3]
swap(a, b) void a.swap(b) 常数[1]
a.size() size_type distance(a.begin(), a.end()) 常数[3]
a.max_size() size_type b.size() ,其中 b 是最大的可能容器 常数[3]
a.empty() 可转换为 bool a.begin() == a.end() 常数
注意
  1. 1.0 1.1 1.2 std::array 为线性
  2. 对于 std::forward_list 始终为线性
  3. 3.0 3.1 3.2 (C++11 前) 非严格常数

给定

  • 容器的 iterator 类型的对象 ij

表达式 i == ji != ji < ji <= ji >= ji > ji - j 中,任一或二者都可以用指代相同元素的一个该容器的 const_iterator 类型的对象替换,而不更改其语义。

(C++14 起)

容器数据竞争

容器线程安全

其他要求

C
T