SequenceContainer
C++概念:顺序容器
阿SequenceContainer
是Container
它以线性方式存储相同类型的对象。
所需
类型X
满足SequenceContainer
如果。
- 类型
X
满足Container
,和给予。
T
的元素类型X
- A的分配程序类型X*X::allocator_type如果存在,则为std::allocator<T>
a
,,,r值类型表达式X
p
,一个有效的Const迭代器进入a
q
,一个有效的可取消引用的Const迭代器a
q1
和q2
,两个Const迭代器进入a
使...[q1, q2)
是有效范围。
i
和j
,,,InputIterator
斯使...[i, j)
是一个有效的范围,迭代器引用隐式可转换为value_type
- il,类型的对象std::initializer_list<value_type>
n
,类型值X::size_type
t
,类型的值或值X::value_type
rv
,类型的非参数值。X::value_type
Args
*模板参数包
args
*带有模式的函数参数包Arg&&
以下表达式必须对所有序列容器有效并具有指定的效果std::array
*
expression | return type | effects | precondition | postcondition |
---|---|---|---|---|
X(n, t) X a(n, t). | | Constructs the sequence container holding n copies of t | T CopyInsertable into X | std::distance(begin(),end()) == n |
X(i, j) X a(i, j). | | Constructs the sequence container equal, element-wise, to the range [i,j) | T is EmplaceConstructible from *i into X (only for std::vector) If the iterators are not ForwardIterators, T must be CopyInsertable. | std::distance(begin(),end()) == std::distance(i,j) |
X(il) | | X(il.begin(), il.end()) | | |
a = il | X& | Assigns the range represented by il into a1 | T CopyInsertable and CopyAssignable | Existing elements of a are destroyed or assigned to |
a.emplace(p,args) | iterator | Insert an object of type T, constructed with std::forward<Args>(args) before p | T CopyInsertable (for std::vector and std::deque) T MoveAssignable and MoveInsertable. | Returned iterator points at the element constructed from args into a |
a.insert(p,t) | iterator | Inserts a copy of t before p | T CopyInsertable (for std::vector and std::deque) T CopyAssignable or MoveAssignable. | Returned iterator points at the copy of t inserted into a |
a.insert(p,rv) | iterator | Inserts a copy of rv before p, possibly using move semantics | T MoveInsertable (for std::vector and std::deque) T MoveAssignable. | Returned iterator points at the copy of rv inserted into a |
a.insert(p,n,t) | iterator | Inserts n copies of t before p | T CopyInsertable and CopyAssignable | Returned iterator points at the copy of the first element inserted into a or is p for n==0 |
a.insert(p,i,j) | iterator | Inserts copies of elements in [i, j) before p | T EmplaceConstructible and i and j are not in a (only for std::vector) If the iterators are not ForwardIterators, T must be MoveInsertable and MoveAssignable. | Each iterator in [i,j) is dereferenced once. Returned iterator points at the copy of the first element inserted into a or is p for i==j |
a.insert(p, il) | iterator | a.insert(p,il.begin(),il.end()) | | Returned iterator points at the copy of the first element inserted into a or is p if il is empty. |
a.erase(q) | iterator | Erases the element pointed to by q | (std::deque, std::vector) T MoveAssignable | Returned iterator points at the element that was immediately following q prior to erasure, or a.end() if no such element exists. |
a.erase(q1,q2) | iterator | Erases elements in [p,q) | (std::deque, std::vector) T MoveAssignable | Returned iterator points at the element that was pointed by q2 prior to any erasure, or a.end() if no such element exists. |
a.clear() | void | Destroys all elements in a | | All references, pointers, and iterators are invalidated, including the end iterator. a.empty() == true. |
a.assign(i,j) | void | Replaces elements in a with a copy of [i, j) | T EmplaceConstructible and i, j not in a (std::vector) If not ForwardIterator. T MoveInsertable. | Each iterator in [i,j) is dereferenced once |
a.assign(il) | void | a.assign(il.begin(),il.end()) | | |
a.assign(n,t) | void | Replaces elements in a with n copies of t | T CopyInsertable and CopyAssignable | |
注记
数组支持从大括号内列表分配,但不支持从std::初始化器分配。[医]列单
std::array
支持大括号内列表的赋值,但不支持std::initializer_list
下列表达式必须对命名为序列容器的序列容器有效并具有其指定的效果:
expression | return type | effects | preconditions | containers |
---|---|---|---|---|
a.front() | reference const_reference for const a. | Equivalent to *a.begin() | | (all) |
a.back() | reference const_reference for const a. | Equivalent to { auto tmp = a.end( --tmp; return *tmp; } | | std::basic_string std::array std::deque std::list std::vector |
a.emplace_front(args) | void | Prepends a T constructed with std::forward<Args>(args)... | T EmplaceConstructible into X from args | std::deque std::forward_list std::list |
a.emplace_back(args) | void | Appends a T constructed with std::forward<Args>(args)... | T EmplaceConstructible into X from args (std::vector only) T MoveInsertable into X. | std::deque std::list std::vector |
a.push_front(t) | void | Prepends a copy of t | T CopyInsertable into X | std::deque std::forward_list std::list |
a.push_front(rv) | void | Prepends a copy of rv, possibly using move semantics | T MoveInsertable into X | std::deque std::forward_list std::list |
a.push_back(t) | void | Appends a copy of t | T CopyInsertable into X | std::basic_string std::deque std::list std::vector |
a.push_back(rv) | void | Appends a copy of rv, possibly using move semantics | T MoveInsertable into X | std::basic_string std::deque std::list std::vector |
a.pop_front() | void | Destroys the first element. | a.empty() == false | std::deque std::forward_list std::list |
a.pop_back() | void | Destroys the last element | a.empty() == false | std::basic_string std::deque std::list std::vector |
an | reference const_reference for const a. | Equivalent to *(n + a.begin()) | | std::basic_string std::array std::deque std::vector |
a.at(n) | reference const_reference for const a. | Equivalent to *(n + a.begin()), except that out_of_range is thrown if n>=size() | | std::basic_string std::array std::deque std::vector |
此外,对于每个序列容器,接受两个输入迭代器和成员函数模板重载的构造函数模板insert()
,,,append()
,,,assign()
,,,replace()
如果相应的模板参数不满足,则两个输入迭代器不参与重载解析。InputIterator
...
标准库中的顺序发货人
basic_string | stores and manipulates sequences of characters (class template) |
---|---|
array (since C++11) | static contiguous array (class template) |
vector | dynamic contiguous array (class template) |
deque | double-ended queue (class template) |
forward_list (since C++11) | singly-linked list (class template) |
list | doubly-linked list (class template) |
权衡/使用说明
std::array | Fast access but fixed number of elements |
---|---|
std::vector | Fast access but mostly inefficient insertions/deletions |
std::liststd::forward_list | Efficient insertion/deletion in the middle of the sequence |
std::deque | Efficient insertion/deletion at the beginning and at the end of the sequence |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。