To make it possible to deal with insertion in the same way as writing into an array, a special kind of iterator
adaptors, called
insert iterators,
are provided in the library
. With regular iterator classes,
while (first != last) *result++ = *first++;
causes a range
[first, last)
to be copied into a range starting with result
. The same code with
result
being an insert iterator will insert corresponding elements into the container
. This device allows all of the
copying algorithms in the library to work in the
insert mode
instead of the
regular overwrite mode
.An insert iterator is constructed from a container and possibly one of its iterators pointing to where
insertion takes place if it is neither at the beginning nor at the end of the container
. Insert iterators satisfy the requirements of output iterators
. operator*
returns the insert iterator itself
. The assignment
operator=(const T& x)
is defined on insert iterators to allow writing into them, it inserts
x
right before where the insert iterator is pointing
. In other words, an insert iterator is like a cursor pointing into the
container where the insertion takes place
. back_insert_iterator
inserts elements at the end of a container,
front_insert_iterator
inserts elements at the beginning of a container, and
insert_iterator
inserts elements where the iterator points to in a container
. back_inserter,
front_inserter,
and
inserter
are three
functions making the insert iterators out of a container
. explicit back_insert_iterator(Container& x);
Effects:
Initializes
container
with
addressof(x). back_insert_iterator& operator=(const typename Container::value_type& value);
Effects:
As if by: container->push_back(value);
back_insert_iterator& operator=(typename Container::value_type&& value);
Effects:
As if by: container->push_back(std::move(value));
back_insert_iterator& operator*();
back_insert_iterator& operator++();
back_insert_iterator operator++(int);
template <class Container>
back_insert_iterator<Container> back_inserter(Container& x);
Returns:
back_insert_iterator<Container>(x). explicit front_insert_iterator(Container& x);
Effects:
Initializes
container
with
addressof(x). front_insert_iterator& operator=(const typename Container::value_type& value);
Effects:
As if by: container->push_front(value);
front_insert_iterator& operator=(typename Container::value_type&& value);
Effects:
As if by: container->push_front(std::move(value));
front_insert_iterator& operator*();
front_insert_iterator& operator++();
front_insert_iterator operator++(int);
template <class Container>
front_insert_iterator<Container> front_inserter(Container& x);
Returns:
front_insert_iterator<Container>(x). insert_iterator(Container& x, typename Container::iterator i);
Effects:
Initializes
container
with
addressof(x) and
iter
with
i. insert_iterator& operator=(const typename Container::value_type& value);
Effects:
As if by:
iter = container->insert(iter, value);
++iter;
insert_iterator& operator=(typename Container::value_type&& value);
Effects:
As if by:
iter = container->insert(iter, std::move(value));
++iter;
insert_iterator& operator*();
insert_iterator& operator++();
insert_iterator& operator++(int);
template <class Container>
insert_iterator<Container> inserter(Container& x, typename Container::iterator i);
Returns:
insert_iterator<Container>(x, i).