C++ 具名要求:容器 (Container)
来自cppreference.com
容器 (Container) 是用于存储其他对象并负责管理那些对象使用的内存的对象。
目录 |
[编辑] 要求
给定以下类型和值:
类型 | 定义 |
T
|
对象类型 |
C
|
包含 T 类型对象的容器类
|
值 | 定义 |
u, v | C 或 const C 类型的值
|
mv | C 类型的值
|
cv | const C 类型的值 |
lhs,rhs | C 类型的左值
|
i,j | C::iterator 或 const C::iterator 类型的值
|
C
在以下类型,语句和表达式都良构并具有指定的语义时满足容器 (Container) :
[编辑] 类型
类型 | 定义 | 要求 |
---|---|---|
typename C::value_type | T
|
T 可复制构造 (CopyConstructible) (C++11 前)从 C 可擦除 (Erasable) (C++11 起)。
|
typename C::reference | T&
|
无显式要求 |
typename C::const_reference | const T& | |
typename C::iterator | 迭代器类型 |
|
typename C::const_iterator | 常迭代器类型 | C::const_iterator 是老式向前迭代器 (LegacyForwardIterator) ,并且它的值类型 是 T 。
|
typename C::difference_type | 有符号整数类型 | C::difference_type 与 C::iterator 和 C::const_iterator 的差类型相同。
|
typename C::size_type | 无符号整数类型 | C::size_type 足以表示 C::difference_type 的所有非负值。
|
[编辑] 语句
语句 | 语义 | 复杂度 | |||
---|---|---|---|---|---|
C c;
C c = C(); |
后条件 | c.empty() 是 true。 | 常数 | ||
C c(v);
C c = C(v); |
前条件 |
|
线性[1] | ||
后条件 |
| ||||
注解 | |||||
|
[编辑] 表达式
表达式 | 类型 | 语义 | 复杂度 | |||||
---|---|---|---|---|---|---|---|---|
C() | C
|
后条件 | C().empty() 是 true。 | 常数 | ||||
C(v) | C
|
前条件 |
|
常数[1] | ||||
后条件 |
| |||||||
lhs = v | C&
|
后条件 |
|
线性 | ||||
v.~C() | void | 效果 | 销毁 v 的所有元素并解分配所有获取到的内存。 | 线性 | ||||
mv.begin() | C::iterator
|
效果 | 返回指向 mv 的首元素的迭代器。 | 常数 | ||||
cv.begin() | C::const_iterator
|
效果 | 返回指向 cv 的首元素的迭代器。 | 常数 | ||||
mv.end() | C::iterator
|
效果 | 返回 mv 的尾后迭代器。 | 常数 | ||||
cv.end() | C::const_iterator
|
效果 | 返回 cv 的尾后迭代器。 | 常数 | ||||
v.cbegin() (C++11 起) |
C::const_iterator
|
效果 | 返回 const_cast<const C&>(v).begin(), | 常数 | ||||
v.cend() (C++11 起) |
C::const_iterator
|
效果 | 返回 const_cast<const C&>(v).end(), | 常数 | ||||
i <=> j (C++20 起) |
std::strong_ordering | 约束 | 此表达式只要求在 C::iterator 满足随机访问迭代器时良构。
|
常数 | ||||
u == v | bool | 效果 | 返回
|
线性[2] | ||||
u != v | 效果 | 等价于 !(u == v)。 | ||||||
lhs.swap(rhs)
swap(lhs, rhs) |
void | 效果 | 交换 lhs 与 rhs 的内容。 | 常数[3] | ||||
v.size() | C::size_type
|
效果 | 返回 v 的元素数量。[4] | 常数 | ||||
v.max_size() | C::size_type
|
效果 | 返回可能存在的最大 C 类型容器的元素数量。
|
常数 | ||||
v.empty() | bool | 效果 | 返回 v.begin() == v.end()。 | 常数 | ||||
可选容器要求 (仅对某些类型的容器提供) | ||||||||
u <=> v (C++20 起) |
synth-three-way-result <C::value_type>
|
前条件 | 要么 T 实现 three_way_comparable ,要么 operator< 是一种对 T 和 const T 类型的值定义的全序关系。
|
线性 | ||||
效果 | 返回 std::lexicographical_compare_three_way (u.begin(), u.end(), v.begin(), v.end(), synth-three-way )[5]。
| |||||||
注解 | ||||||||
|