22 Containers library [containers]

22.2 Container requirements [container.requirements]

22.2.1 General container requirements [container.requirements.general]

Table 80: Allocator-aware container requirements [tab:container.alloc.req]
Expression
Return type
Assertion/note
Complexity
pre-/post-condition
allocator_­type
A
Mandates: allocator_­type​::​value_­type is the same as X​::​value_­type.
compile time
get_­- allocator()
A
constant
X()
X u;
Preconditions: A meets the Cpp17DefaultConstructible requirements.

Postconditions: u.empty() returns true, u.get_­allocator() == A()
constant
X(m)
Postconditions: u.empty() returns true,
constant
X u(m);
u.get_­allocator() == m
X(t, m)
X u(t, m);
Preconditions: T is Cpp17CopyInsertable into X.

Postconditions: u == t, u.get_­allocator() == m
linear
X(rv)
X u(rv);
Postconditions: u has the same elements as rv had before this construction; the value of u.get_­allocator() is the same as the value of rv.get_­allocator() before this construction.
constant
X(rv, m)
X u(rv, m);
Preconditions: T is Cpp17MoveInsertable into X.

Postconditions: u has the same elements, or copies of the elements, that rv had before this construction, u.get_­allocator() == m
constant if m == rv.get_­allocator(), otherwise linear
a = t
X&
Preconditions: T is Cpp17CopyInsertable into X and Cpp17CopyAssignable.

Postconditions: a == t
linear
a = rv
X&
Preconditions: If allocator_­-
traits<allocator_­type>
​::​propagate_­on_­container_­-
move_­assignment​::​value is
false, T is Cpp17MoveInsertable into X and Cpp17MoveAssignable.

Effects: All existing elements of a are either move assigned to or destroyed.

Postconditions: If a and rv do not refer to the same object, a is equal to the value that rv had before this assignment.
linear
a.swap(b)
void
Effects: exchanges the contents of a and b
constant