C++ named requirements: SequenceContainer - cppreference.com (original) (raw)

A SequenceContainer is a Container that stores objects of the same type in a linear arrangement.

C satisfies the requirements of SequenceContainer if all following conditions are satisfied:

Basic operations(required for all sequence containers in the standard library except std::array(since C++11))
Statement Semantics[1]
C c(n, t); Effect Constructs the sequence container holding n copies of t.
Precondition T is CopyInsertable into C. (since C++11)
Postcondition std::distance(c.begin(), c.end()) is n.
C c(i, j); Effect Constructs the sequence container equal, element-wise, to the range [i, j). Each iterator in the range [i, j) is dereferenced exactly once.
Precondition T is EmplaceConstructible into C from *i. (since C++11)
Postcondition std::distance(c.begin(), c.end()) is std::distance(i, j).
Expression Type Semantics
C(std::from_range, rg)(since C++23) C Effect Constructs the sequence container equal, element-wise, to the range rg. Each iterator in the range rg is dereferenced exactly once.
Precondition T is EmplaceConstructible into X from *ranges::begin(rg).
Postcondition std::distance(begin(), end()) is ranges::distance(rg).
C(il)(since C++11) C Equivalent to C(il.begin(), il.end()).
v = il(since C++11) C& Effect Assigns the range represented by il into v.[2]
Return value *this
Precondition T is CopyInsertable into C and CopyAssignable.
Postcondition Existing elements of v are either destroyed or assigned to.
v.emplace(p, args)(since C++11) Iter Effect Insert an object of type T, constructed with std::forward<Args>(args)... before p.
Return value An iterator that points to the new element constructed from args into v.
Precondition T is EmplaceConstructible into C from args.
v.insert(p, t) Iter Effect Inserts a copy of t before p.
Return value An iterator that points to the copy of t inserted into v.
Precondition T is CopyInsertable into C. (since C++11)
v.insert(p, rv)(since C++11) Iter Effect Inserts a copy of rv before p, possibly using move semantics.
Return value An iterator that points to the copy of rv inserted into v.
Precondition T is MoveInsertable into C.
v.insert(p, n, t) Iter Effect Inserts n copies of t before p.
Return value An iterator that points to the copy of the first element inserted into v, or p if n is ​0​.
Precondition T is CopyInsertable into C and CopyAssignable. (since C++11)
v.insert(p, i, j) Iter Effect Inserts copies of elements in [i, j) before p. Each iterator in the range [i, j) is dereferenced exactly once.
Return value An iterator that points to the copy of the first element inserted into v, or p if i == j is true.
Precondition T is EmplaceConstructible into C from *i. (since C++11) i and j are not in v.
v.insert_range(p, rg)(since C++23) Iter Effect Inserts copies of elements in rg before p. Each iterator in the range rg is dereferenced exactly once.
Return value An iterator that points to the copy of the first element inserted into v, or p if rg is empty.
Precondition T is EmplaceConstructible into C from *ranges::begin(rg). rg and v do not overlap.
v.insert(p, il)(since C++11) Iter Equivalent to v.insert(p, il.begin(), il.end()).
v.erase(q) Iter Effect Erases the element pointed to by q.
Return value An iterator that points to the element immediately following q prior to the element being erased, or v.end() if no such element exists.
v.erase(q1, q2) Iter Effect Erases elements in [q1, q2).
Return value An iterator that points to the element pointed to by q2 prior to any elements being erased, or v.end() if no such element exists.
v.clear() void Effect Destroys all elements in v. Invalidates all references, pointers, and iterators referring to the elements of v and may invalidate the past-the-end iterator.
Postcondition v.empty() is true.
Complexity Linear.
v.assign(i, j) void Effect Replaces elements in v with a copy of [i, j). Invalidates all references, pointers and iterators referring to the elements of v. Each iterator in [i, j) is dereferenced exactly once.
Precondition T is EmplaceConstructible into C from *i. T is assignable from *i. (since C++11) i and j are not in v.
v.assign_range(rg)(since C++23) void Effect Replaces elements in v with a copy of each element in rg. If std::assignable_from <T&, ranges::range_reference_t<R>> is not modeled, the program is ill-formed. Invalidates all references, pointers and iterators referring to the elements of v. Each iterator in the range rg is dereferenced exactly once.
Precondition T is EmplaceConstructible into C from *ranges::begin(rg). rg and v do not overlap.
v.assign(il)(since C++11) void Equivalent to v.assign(il.begin(), il.end()).
v.assign(n, t) void Effect Replaces elements in v with n copies of t.
Precondition T is CopyInsertable into C and CopyAssignable. (since C++11)
Extra operations[3](only required for specified sequence containers, omitting std::)
Expression Type Semantics
v.front() Ref Containers basic_string, array, vector, inplace_vector, deque, list, forward_list
Return value *v.begin()
cv.front() CRef Containers basic_string, array, vector, inplace_vector, deque, list, forward_list
Return value *cv.begin()
v.back() Ref Containers basic_string, array, vector, inplace_vector, deque, list
Equivalent to auto tmp = v.end(); --tmp; return *tmp;[4].
cv.back() CRef Containers basic_string, array, vector, inplace_vector, deque, list
Equivalent to auto tmp = cv.end(); --tmp; return *tmp;[5].
v.emplace_front(args)(since C++11) void Containers deque, list, forward_list
Effect Prepends an object of type T constructed with std::forward<Args>(args)....
Return value v.front()
Precondition T is EmplaceConstructible into C from args.
v.emplace_back(args)(since C++11) void Containers vector, inplace_vector, deque, list
Effect Appends an object of type T constructed with std::forward<Args>(args)....
Return value v.back()
Precondition T is EmplaceConstructible into C from args.
v.push_front(t) void Containers deque, list, forward_list
Effect Prepends a copy of t.
Precondition T is CopyInsertable into C. (since C++11)
v.push_front(rv)(since C++11) void Containers deque, list, forward_list
Effect Prepends a copy of rv, possibly using move semantics.
Precondition T is MoveInsertable into C.
v.prepend_range(rg)(since C++23) void Containers deque, list, forward_list
Effect Inserts[6] copies of elements in rg before v.begin(). Each iterator in the range rg is dereferenced exactly once.
Precondition T is EmplaceConstructible into C from *ranges::begin(rg).
v.push_back(t) void Containers basic_string, vector, inplace_vector, deque, list
Effect Appends a copy of t.
Precondition T is CopyInsertable into C. (since C++11)
v.push_back(rv)(since C++11) void Containers basic_string, vector, inplace_vector, deque, list
Effect Appends a copy of rv, possibly using move semantics.
Precondition T is MoveInsertable into C.
v.append_range(rg)(since C++23) void Containers vector, inplace_vector, deque, list
Effect Inserts[6] copies of elements in rg before v.end(). Each iterator in the range rg is dereferenced exactly once.
Precondition T is EmplaceConstructible into C from *ranges::begin(rg).
v.pop_front() void Containers deque, list, forward_list
Effect Destroys the first element.
Precondition a.empty() is false.
v.pop_back() void Containers basic_string, vector, inplace_vector, deque, list
Effect Destroys the last element.
Precondition a.empty() is false.
v[n] Ref Containers basic_string, array, vector, inplace_vector, deque
Equivalent to return *(v.begin() + n);.
cv[n] CRef Containers basic_string, array, vector, inplace_vector, deque
Equivalent to return *(cv.begin() + n);.
v.at(n) Ref Containers basic_string, array, vector, inplace_vector, deque
Return value *(v.begin() + n)
Exceptions Throws std::out_of_range if n >= v.size() is true.
cv.at(n) CRef Containers basic_string, array, vector, inplace_vector, deque
Return value *(cv.begin() + n)
Exceptions Throws std::out_of_range if n >= cv.size() is true.
Notes
For an expression whose effect is equivalent to some other operations, the conditions of the expressions inside those operations are inherited on top of the conditions listed in the table. std::array supports assignment from a brace-enclosed initializer list, but not from an std::initializer_list. All operations below except prepend_range and append_range(since C++23) take amortized constant time. In C++98, tmp was declared to have type C::iterator. In C++98, tmp was declared to have type C::const_iterator. ↑ 6.0 6.1 Insertion order, relative to order of elements in rg, is non-reversing.

The following standard library string types and containers satisfy the SequenceContainer requirements:

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.