類模板
<iterator>

std::front_insert_iterator

template <class Container> class front_insert_iterator;
前向插入迭代器

前向插入迭代器是一種特殊的 輸出迭代器,它允許通常會覆蓋元素的 演算法(例如 copy)轉而將新元素插入到容器的開頭。

該容器需要有一個名為 push_front 的成員函式(例如標準容器 dequelist)。

front_insert_iterator 使用賦值運算子(無論是透過解引用還是直接使用),都會導致容器擴充套件一個元素,該元素會被賦給它的值進行初始化。

對於 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; }
};

庫提供了一個名為 front_inserter 的函式,它可以從合適的容器自動生成一個 front_insert_iterator 類。

模板引數

容器
一個定義了 push_front 成員函式的容器類(例如標準容器 dequelist)。

成員型別

成員front_insert_iterator 中的定義
iterator_categoryoutput_iterator_tag
value_typevoid
difference_typevoid
指標void
引用void
iterator_typevoid

成員函式

建構函式
front_insert_iterator 物件由一個容器構造,它們在內部保留該容器的引用。
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


另見