◐ Shell
clean mode source ↗

C++ 具名要求:序列容器 (SequenceContainer) - cppreference.com

基本要求
std::array 之外的(C++11 起)所有标准库序列容器都需要满足)
语句     语义[1]
C c(n, t); 效果 构造保有 nt 的副本的序列容器。
前条件 

T 可复制插入 (CopyInsertable) C 中。

(C++11 起)
后条件 std::distance(c.begin(), c.end())n
C c(i, j); 效果 构造与范围 [ij) 逐元素相等的序列容器。
  • 范围 [ij) 中的每个迭代器都只会恰好解引用一次。
前条件

T*i 可就位构造 (EmplaceConstructible) C 中。

(C++11 起)
后条件 std::distance(c.begin(), c.end())std::distance(i, j)
表达式  类型  语义
C(std::from_range, rg)
(C++23 起)
C 效果 构造与范围 rg 逐元素相等的序列容器。
  • 范围 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 中的元素的迭代器。
前条件 Targs 可就位构造 (EmplaceConstructible) C 中。
v.insert(p, t) Iter 效果 p 前插入 t 的副本。
返回值 指向插入到 v 中的 t 的副本的迭代器。
前条件

T 可复制插入 (CopyInsertable) C 中。

(C++11 起)
v.insert(p, rv)
(C++11 起)
Iter 效果 p 前插入 rv 的副本,可能使用移动语义。
返回值 指向插入到 a 中的 rv 的副本的迭代器。
前条件 T 可移动插入 (MoveInsertable) C 中。
v.insert(p, n, t) Iter 效果 p 前插入 nt 的副本。
返回值 指向插入到 v 中的首元素的副本的迭代器(在 n0 时返回 p)。
前条件

T 可复制插入 (CopyInsertable) C 中,并且可复制赋值 (CopyAssignable)

(C++11 起)
v.insert(p, i, j) Iter 效果 p 前插入 [ij) 中元素的副本。
  • 范围 [ij) 中的每个迭代器都只会恰好解引用一次。
返回值 指向插入到 v 中的首元素的副本的迭代器(在 i == jtrue 时返回 p)。
前条件
(C++11 起)
  • ij 都不在 v 中。
v.insert_range(p, rg)
(C++23 起)
Iter 效果 p 前插入 rg 中元素的副本。
  • 范围 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 效果 擦除 [q1q2) 中的元素。
返回值 指向在任何元素被擦除前 q2 曾指向的元素(在此类元素不存在时返回 v.end())。
v.clear() void 效果 销毁 v 中的所有元素。
  • 指代 v 中的元素的所有引用、指针和迭代器都会失效,尾后迭代器也可能会失效。
后条件 v.empty()true
复杂度 线性。
v.assign(i, j) void 效果 [ij) 的副本替换 v 中的元素。
  • 指代 v 中的元素的所有引用、指针和迭代器都会失效。
  • 范围 [ij) 中的每个迭代器都只会恰好解引用一次。
前条件
(C++11 起)
  • ij 都不在 v 中。
v.assign_range(rg)
(C++23 起)
void 效果 rg 中每个元素的副本替换 v 中的元素。
  • 如果 std::assignable_from
        <T&, ranges::range_reference_t<R>>
    没有得到实现,那么程序非良构。
  • 指代 v 中的元素的所有引用、指针和迭代器都会失效。
  • 范围 rg 中的每个迭代器都只会恰好解引用一次。
前条件
v.assign(il)
(C++11 起)
void 等价于 v.assign(il.begin(), il.end())
v.assign(n, t) void 效果 tn 个副本替换 v 中的元素。
前条件

T 可复制插入 (CopyInsertable) C 中,并且可复制赋值 (CopyAssignable)

(C++11 起)
    额外操作[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()
前条件 Targs 可就位构造 (EmplaceConstructible) C 中。
v.emplace_back(args)
(C++11 起)
void 容器 vector, inplace_vector, deque, list
效果 后附一个以 std::forward<Args>(args)... 构造的 T 类型对象。
返回值 v.back()
前条件 Targs 可就位构造 (EmplaceConstructible) C 中。
v.push_front(t) void 容器 deque, list, forward_list
效果 前附 t 的一个副本。
前条件

T 可复制插入 (CopyInsertable) C 中。

(C++11 起)
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 中的元素的副本。
  • 范围 rg 中的每个迭代器都只会恰好解引用一次。
前条件 T*ranges::begin(rg)可就位构造 (EmplaceConstructible) C 中。
v.push_back(t) void 容器 basic_string, vector, inplace_vector, deque, list
效果 后附 t 的一个副本。
前条件

T 可复制插入 (CopyInsertable) C 中。

(C++11 起)
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 中的元素的副本。
  • 范围 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
注解
  1. 对于效果等价于其他操作的表达式,在表格中列出的条件的基础上也会继承那些操作中的表达式的条件。
  2. std::array 支持从花括号包围的初始化器列表赋值,但不支持从 std::initializer_list 赋值。
  3. prepend_rangeappend_range(C++23 起)以下所有操作都会在均摊常数时间内完成。
  4. 在 C++98 中,tmp 被声明为具有 C::iterator 类型。
  5. 在 C++98 中,tmp 被声明为具有 C::const_iterator 类型。
  6. 6.0 6.1 插入顺序就是 rg 中元素的顺序,不是逆序。