template <class Container> class insert_iterator;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <class Container>
class insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>
{
protected:
Container* container;
typename Container::iterator iter;
public:
typedef Container container_type;
explicit insert_iterator (Container& x, typename Container::iterator i)
: container(&x), iter(i) {}
insert_iterator<Container>& operator= (typename Container::const_reference value)
{ iter=container->insert(iter,value); ++iter; return *this; }
insert_iterator<Container>& operator* ()
{ return *this; }
insert_iterator<Container>& operator++ ()
{ return *this; }
insert_iterator<Container>& operator++ (int)
{ return *this; }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <class Container>
class insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>
{
protected:
Container* container;
typename Container::iterator iter;
public:
typedef Container container_type;
explicit insert_iterator (Container& x, typename Container::iterator i)
: container(&x), iter(i) {}
insert_iterator<Container>& operator= (const typename Container::value_type& value)
{ iter=container->insert(iter,value); ++iter; return *this; }
insert_iterator<Container>& operator= (typename Container::value_type&& value)
{ iter=container->insert(iter,std::move(value)); ++iter; return *this; }
insert_iterator<Container>& operator* ()
{ return *this; }
insert_iterator<Container>& operator++ ()
{ return *this; }
insert_iterator<Container> operator++ (int)
{ return *this; }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <class Container>
class insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>
{
protected:
Container* container;
typename Container::iterator iter;
public:
typedef Container container_type;
explicit insert_iterator (Container& x, typename Container::iterator i)
: container(std::addressof(x)), iter(i) {}
insert_iterator<Container>& operator= (const typename Container::value_type& value)
{ iter=container->insert(iter,value); ++iter; return *this; }
insert_iterator<Container>& operator= (typename Container::value_type&& value)
{ iter=container->insert(iter,std::move(value)); ++iter; return *this; }
insert_iterator<Container>& operator* ()
{ return *this; }
insert_iterator<Container>& operator++ ()
{ return *this; }
insert_iterator<Container> operator++ (int)
{ return *this; }
};
| member | definition in insert_iterator |
|---|---|
| iterator_category | output_iterator_tag |
| value_type | void |
| difference_type | void |
| pointer | void |
| reference | void |
| iterator_type | void |
operator=operator*operator++1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// insert_iterator example
#include <iostream> // std::cout
#include <iterator> // std::insert_iterator
#include <list> // std::list
#include <algorithm> // std::copy
int main () {
std::list<int> foo, bar;
for (int i=1; i<=5; i++)
{ foo.push_back(i); bar.push_back(i*10); }
std::list<int>::iterator it = foo.begin();
advance(it,3);
std::insert_iterator< std::list<int> > insert_it (foo,it);
std::copy (bar.begin(),bar.end(),insert_it);
std::cout << "foo:";
for ( std::list<int>::iterator it = foo.begin(); it!= foo.end(); ++it )
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
1 2 3 10 20 30 40 50 4 5