C++ 具名要求:序列容器 (SequenceContainer) - cppreference.com
| 基本要求 (除 std::array 之外的(C++11 起)所有标准库序列容器都需要满足) | |||
|---|---|---|---|
| 语句 | 语义[1] | ||
C c(n, t);
|
效果 | 构造保有 n 个 t 的副本的序列容器。
| |
| 前条件 |
| ||
| 后条件 | std::distance(c.begin(), c.end()) 是 n。
| ||
C c(i, j);
|
效果 | 构造与范围 [i, j) 逐元素相等的序列容器。
| |
| 前条件 |
| ||
| 后条件 | std::distance(c.begin(), c.end()) 是 std::distance(i, j)。
| ||
| 表达式 | 类型 | 语义 | |
C(std::from_range, rg)(C++23 起) |
C
|
效果 | 构造与范围 rg 逐元素相等的序列容器。
|
| 前条件 | T 从 *ranges::begin(rg) 可就位构造 (EmplaceConstructible) 到 C 中。
| ||
| 后条件 | std::distance(begin(), end()) 是 ranges::distance(rg)。
| ||
C(il)(C++11 起) |
C
|
等价于 C(il.begin(), il.end())。
| |
v = il(C++11 起) |
C&
|
效果 | 将 il 所表示的范围赋值到 a 中。[2]
|
| 返回值 | *this
| ||
| 前条件 | T 可复制插入 (CopyInsertable) 到 C 中,并且可复制赋值 (CopyAssignable) 。
| ||
| 后条件 | v 的既存元素要么被销毁,要么被赋值。
| ||
v.emplace(p, args)(C++11 起) |
Iter
|
效果 | 在 p 前插入以 std::forward<Args>(args)... 构造的 T 类型对象。
|
| 返回值 | 指向由 args 构造到 v 中的元素的迭代器。
| ||
| 前条件 | T 从 args 可就位构造 (EmplaceConstructible) 到 C 中。
| ||
v.insert(p, t)
|
Iter
|
效果 | 在 p 前插入 t 的副本。
|
| 返回值 | 指向插入到 v 中的 t 的副本的迭代器。
| ||
| 前条件 |
| ||
v.insert(p, rv)(C++11 起) |
Iter
|
效果 | 在 p 前插入 rv 的副本,可能使用移动语义。
|
| 返回值 | 指向插入到 a 中的 rv 的副本的迭代器。
| ||
| 前条件 | T 可移动插入 (MoveInsertable) 到 C 中。
| ||
v.insert(p, n, t)
|
Iter
|
效果 | 在 p 前插入 n 个 t 的副本。
|
| 返回值 | 指向插入到 v 中的首元素的副本的迭代器(在 n 是 0 时返回 p)。
| ||
| 前条件 |
| ||
v.insert(p, i, j)
|
Iter
|
效果 | 在 p 前插入 [i, j) 中元素的副本。
|
| 返回值 | 指向插入到 v 中的首元素的副本的迭代器(在 i == j 是 true 时返回 p)。
| ||
| 前条件 |
| ||
v.insert_range(p, rg)(C++23 起) |
Iter
|
效果 | 在 p 前插入 rg 中元素的副本。
|
| 返回值 | 指向插入到 v 中的首元素的副本的迭代器(在 rg 为空时返回 p)。
| ||
| 前条件 |
| ||
v.insert(p, il)(C++11 起) |
Iter
|
等价于 v.insert(p, il.begin(), il.end())。
| |
v.erase(q)
|
Iter
|
效果 | 擦除 q 指向的元素。
|
| 返回值 | 指向擦除前紧跟 q 之后的元素的迭代器(在此类元素不存在时返回 v.end())。
| ||
v.erase(q1, q2)
|
Iter
|
效果 | 擦除 [q1, q2) 中的元素。
|
| 返回值 | 指向在任何元素被擦除前 q2 曾指向的元素(在此类元素不存在时返回 v.end())。
| ||
v.clear()
|
void
|
效果 | 销毁 v 中的所有元素。
|
| 后条件 | v.empty() 是 true。
| ||
| 复杂度 | 线性。 | ||
v.assign(i, j)
|
void
|
效果 | 以 [i, j) 的副本替换 v 中的元素。
|
| 前条件 |
| ||
v.assign_range(rg)(C++23 起) |
void
|
效果 | 以 rg 中每个元素的副本替换 v 中的元素。
|
| 前条件 |
| ||
v.assign(il)(C++11 起) |
void
|
等价于 v.assign(il.begin(), il.end())。
| |
v.assign(n, t)
|
void
|
效果 | 用 t 的 n 个副本替换 v 中的元素。
|
| 前条件 |
| ||
| 额外操作[3] (只有指定的容器需要满足,省略 std::)
| |||
| 表达式 | 类型 | 语义 | |
v.front()
|
Ref
|
容器 | basic_string, array, vector, inplace_vector, deque, list, forward_list
|
| 返回值 | *v.begin()
| ||
cv.front()
|
CRef
|
容器 | basic_string, array, vector, inplace_vector, deque, list, forward_list
|
| 返回值 | *cv.begin()
| ||
v.back()
|
Ref
|
容器 | basic_string, array, vector, inplace_vector, deque, list
|
等价于 auto tmp = v.end(); --tmp; return *tmp;[4]。
| |||
cv.back()
|
CRef
|
容器 | basic_string, array, vector, inplace_vector, deque, list
|
等价于 auto tmp = cv.end(); --tmp; return *tmp;[5]。
| |||
v.emplace_front(args)(C++11 起) |
void
|
容器 | deque, list, forward_list
|
| 效果 | 前附一个以 std::forward<Args>(args)... 构造的 T 类型对象。
| ||
| 返回值 | v.front()
| ||
| 前条件 | T 从 args 可就位构造 (EmplaceConstructible) 到 C 中。
| ||
v.emplace_back(args)(C++11 起) |
void
|
容器 | vector, inplace_vector, deque, list
|
| 效果 | 后附一个以 std::forward<Args>(args)... 构造的 T 类型对象。
| ||
| 返回值 | v.back()
| ||
| 前条件 | T 从 args 可就位构造 (EmplaceConstructible) 到 C 中。
| ||
v.push_front(t)
|
void
|
容器 | deque, list, forward_list
|
| 效果 | 前附 t 的一个副本。
| ||
| 前条件 |
| ||
v.push_front(rv)(C++11 起) |
void
|
容器 | deque, list, forward_list
|
| 效果 | 前附 rv 的一个副本,可能用移动语义。
| ||
| 前条件 | T 可移动插入 (MoveInsertable) 到 C 中。
| ||
v.prepend_range(rg)(C++23 起) |
void
|
容器 | deque, list, forward_list
|
| 效果 | 在 v.begin() 前插入[6] rg 中的元素的副本。
| ||
| 前条件 | T 从 *ranges::begin(rg) 可可就位构造 (EmplaceConstructible) 到 C 中。
| ||
v.push_back(t)
|
void
|
容器 | basic_string, vector, inplace_vector, deque, list
|
| 效果 | 后附 t 的一个副本。
| ||
| 前条件 |
| ||
v.push_back(rv)(C++11 起) |
void
|
容器 | basic_string, vector, inplace_vector, deque, list
|
| 效果 | 后附 rv 的一个副本,可能用移动语义。
| ||
| 前条件 | T 可移动插入 (MoveInsertable) 到 C 中。
| ||
v.append_range(rg)(C++23 起) |
void
|
容器 | vector, inplace_vector, deque, list
|
| 效果 | 在 v.begin() 前插入[6] rg 中的元素的副本。
| ||
| 前条件 | T 从 *ranges::begin(rg) 可可就位构造 (EmplaceConstructible) 到 C 中。
| ||
v.pop_front()
|
void
|
容器 | deque, list, forward_list
|
| 效果 | 销毁首元素。 | ||
| 前条件 | a.empty() 是 false。
| ||
v.pop_back()
|
void
|
容器 | basic_string, vector, inplace_vector, deque, list
|
| 效果 | 销毁最末元素。 | ||
| 前条件 | a.empty() 是 false。
| ||
v[n]
|
Ref
|
容器 | basic_string, array, vector, inplace_vector, deque
|
等价于 return *(v.begin() + n);。
| |||
cv[n]
|
CRef
|
容器 | basic_string, array, vector, inplace_vector, deque
|
等价于 return *(cv.begin() + n);。
| |||
v.at(n)
|
Ref
|
容器 | basic_string, array, vector, inplace_vector, deque
|
| 返回值 | *(v.begin() + n)
| ||
| 异常 | 在 n >= v.size() 是 true 时抛出 std::out_of_range。
| ||
cv.at(n)
|
CRef
|
容器 | basic_string, array, vector, inplace_vector, deque
|
| 返回值 | *(cv.begin() + n)
| ||
| 异常 | 在 n >= v.size() 是 true 时抛出 std::out_of_range。
| ||
| 注解 | |||