C++ 具名要求:容器 (Container)
容器 (Container) 是用于存储其他对象并照顾管理其所容纳的对象所用的内存的对象。
要求
- 容器类型
C
; - 元素类型
T
; -
C
类型的对象a
、b
。 -
rv
,C
类型右值表达式。
类型
名称 | 类型 | 注解 |
---|---|---|
value_type |
T | 可擦除 (Erasable) |
reference |
T& | |
const_reference |
const T& | |
iterator |
指向 T 的迭代器 | 遗留向前迭代器 (LegacyForwardIterator) 可转换为 const_iterator
|
const_iterator |
指向 T 的常迭代器 | 遗留向前迭代器 (LegacyForwardIterator) |
difference_type |
有符号整数 | 必须与 iterator 和 const_iterator 的 iterator_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 | 交换 a 与 b 的值 |
常数[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() | 常数 | ||
注意 | |||||
|
给定
表达式 i == j、i != j、i < j、i <= j、i >= j、i > j、i - j 中,任一或二者都可以用指代相同元素的一个该容器的 |
(C++14 起) |
容器数据竞争
其他要求
- C
- T