|
|
| |
Categories : iterators, adaptors | Component type: type |
Description
Back_insert_iterator
is an iterator adaptor that functions as an OutputIterator : assignment through a back_insert_iterator
inserts an object after the last element of a BackInsertionSequence. [1]
Example
List<int> L;
L.push_front(3);
back_insert_iterator<List<int> > ii(L);
*ii++ = 0;
*ii++ = 1;
*ii++ = 2;
copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
Definition
Defined in the standard header iterator, and in the nonstandard backward-compatibility header iterator.h.
Template parameters
Parameter | Description | Default |
BackInsertionSequence | The type of BackInsertionSequence into which values will be inserted. | |
Model of
OutputIterator. An insert iterator's set of value types (as defined in the OutputIterator requirements) consists of a single type : BackInsertionSequence::value_type
.
Type requirements
The template parameter BackInsertionSequence
must be a BackInsertionSequence.
Public base classes
None.
Members
Member | Where defined | Description |
back_insert_iterator(BackInsertionSequence&) | back_insert_iterator | See below. |
back_insert_iterator(const back_insert_iterator&) | trivial | The copy constructor |
back_insert_iterator&
operator=(const back_insert_iterator&)
| trivial | The assignment operator |
back_insert_iterator& operator*() | OutputIterator | Used to implement the OutputIterator expression *i = x . [2] |
back_insert_iterator&
operator=(const BackInsertionSequence ::value_type&)
| OutputIterator | Used to implement the OutputIterator expression *i = x . [2] |
back_insert_iterator& operator++() | OutputIterator | Preincrement. |
back_insert_iterator& operator++(int) | OutputIterator | Postincrement. |
output_iterator_tag
iterator_category(const back_insert_iterator&)
| iterator_tags | Returns the iterator's category. This is a global function, not a member. |
template<class BackInsertionSequence>
back_insert_iterator<BackInsertionSequence>
back_inserter(BackInsertionSequence& S)
| back_insert_iterator | See below. |
New members
These members are not defined in the OutputIterator requirements, but are specific to back_insert_iterator
.
Member function | Description |
back_insert_iterator(BackInsertionSequence& S) | Constructs a back_insert_iterator that inserts objects after the last element of S . (That is, it inserts objects just before S 's past-the-end iterator.) |
template<class BackInsertionSequence>
back_insert_iterator<BackInsertionSequence>
back_inserter(BackInsertionSequence& S);
| Equivalent to back_insert_iterator<BackInsertionSequence>(S) . [3] This is a global function, not a member function. |
Notes
[1] Note the difference between assignment through a BackInsertionSequence iterator
and assignment through a back_insert_iterator<BackInsertionSequence>
. If i
is a valid BackInsertionSequence iterator
, then it points to some particular element in the BackInsertionSequence; the expression *i = t
replaces that element with t
, and does not change the total number of elements in the BackInsertionSequence. If ii
is a valid back_insert_iterator<BackInsertionSequence>
, however, then the expression *ii = t
is equivalent, to the expression seq.push_back(t)
. That is, it does not overwrite any of seq
's elements and it does change seq
's size.
[2] Note how assignment through a back_insert_iterator
is implemented. In general, unary operator*
must be defined so that it returns a proxy object, where the proxy object defines operator=
to perform the insert operation. In this case, for the sake of simplicity, the proxy object is the back_insert_iterator
itself. That is, *i
simply returns i
, and *i = t
is equivalent to i = t
. You should not, however, rely on this behavior. It is an implementation detail, and it is not guaranteed to remain the same in future versions.
[3] This function exists solely for the sake of convenience : since it is a non-member function, the template parameters may be inferred and the type of the back_insert_iterator
need not be declared explicitly. One easy way to reverse a range and insert it at the end of a BackInsertionSequence S
, for example, is reverse_copy(first, last, back_inserter(S))
.
See also
insert_iterator, front_insert_iterator, OutputIterator, BackInsertionSequence, Sequence, Iterators