template <class Container> class front_insert_iterator;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <class Container>
class front_insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>
{
protected:
Container* container;
public:
typedef Container container_type;
explicit front_insert_iterator (Container& x) : container(&x) {}
front_insert_iterator<Container>& operator= (typename Container::const_reference value)
{ container->push_front(value); return *this; }
front_insert_iterator<Container>& operator* ()
{ return *this; }
front_insert_iterator<Container>& operator++ ()
{ return *this; }
front_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
template <class Container>
class front_insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>
{
protected:
Container* container;
public:
typedef Container container_type;
explicit front_insert_iterator (Container& x) : container(&x) {}
front_insert_iterator<Container>& operator= (const typename Container::value_type& value)
{ container->push_front(value); return *this; }
front_insert_iterator<Container>& operator= (typename Container::value_type&& value)
{ container->push_front(std::move(value)); return *this; }
front_insert_iterator<Container>& operator* ()
{ return *this; }
front_insert_iterator<Container>& operator++ ()
{ return *this; }
front_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
template <class Container>
class front_insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>
{
protected:
Container* container;
public:
typedef Container container_type;
explicit front_insert_iterator (Container& x) : container(std::addressof(x)) {}
front_insert_iterator<Container>& operator= (const typename Container::value_type& value)
{ container->push_front(value); return *this; }
front_insert_iterator<Container>& operator= (typename Container::value_type&& value)
{ container->push_front(std::move(value)); return *this; }
front_insert_iterator<Container>& operator* ()
{ return *this; }
front_insert_iterator<Container>& operator++ ()
{ return *this; }
front_insert_iterator<Container> operator++ (int)
{ return *this; }
};
| member | definition in front_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
// front_insert_iterator example
#include <iostream> // std::cout
#include <iterator> // std::front_insert_iterator
#include <deque> // std::deque
#include <algorithm> // std::copy
int main () {
std::deque<int> foo, bar;
for (int i=1; i<=5; i++)
{ foo.push_back(i); bar.push_back(i*10); }
std::front_insert_iterator< std::deque<int> > front_it (foo);
std::copy (bar.begin(),bar.end(),front_it);
std::cout << "foo:";
for ( std::deque<int>::iterator it = foo.begin(); it!= foo.end(); ++it )
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
50 40 30 20 10 1 2 3 4 5