Range size | |
Completeness | An algorithm that iterates through the range |
• vector
[1] The fact that the lifetime of elements cannot exceed that of of their container may seem like a severe restriction. In fact, though, it is not. Note that pointers and iterators are objects; like any other objects, they may be stored in a container. The container, in that case, 'owns' the pointers themselves, but not the objects that they point to.
[2] This expression must be a
[3] This may either be a
[4] A container's iterator type and const iterator type may be the same: there is no guarantee that every container must have an associated mutable iterator type. For example,
[5] It is required that the reference type has the same semantics as an ordinary C++ reference, but it need not actually be an ordinary C++ reference. Some implementations, for example, might provide additional reference types to support non-standard memory models. Note, however, that 'smart references' (user-defined reference types that provide additional functionality) are not a viable option. It is impossible for a user-defined type to have the same semantics as C++ references, because the C++ language does not support redefining the member access operator (
[6] As in the case of references [5], the pointer type must have the same semantics as C++ pointers but need not actually be a C++ pointer. 'Smart pointers,' however, unlike 'smart references', are possible. This is because it is possible for user-defined types to define the dereference operator and the pointer member access operator,
[7] The iterator type need only be an
[8] In the case of a fixed-size container,
[9] For any Assignable type, swap can be defined in terms of assignment. This requires three assignments, each of which, for a container type, is linear in the container's size. In a sense, then,
[10] For many containers, such as
[11] Although
The Iterator overview, Input Iterator, Sequence
Forward Container
Category: containers
Component type: concept
A Forward Container is a Container whose elements are arranged in a definite order: the ordering will not change spontaneously from iteration to iteration. The requirement of a definite ordering allows the definition of element-by-element equality (if the container's element type is Equality Comparable) and of lexicographical ordering (if the container's element type is LessThan Comparable).
Iterators into a Forward Container satisfy the forward iterator requirements; consequently, Forward Containers support multipass algorithms and allow multiple iterators into the same container to be active at the same time. Refinement of Container, EqualityComparable, LessThanComparable
No additional types beyond those defined in Container. However, the requirements for the iterator type are strengthened: the iterator type must be a model of Forward Iterator.
X
A type that is a model of Forward Container
a, b
Object of type
T
The value type of
In addition to the expressions defined in Container, EqualityComparable, and LessThanComparable, the following expressions must be valid.
Name | Expression | Type requirements | Return type |
---|---|---|---|
Equality | a == b | Convertible to | |
Inequality |