類模板
<iterator>

std::back_insert_iterator

template <class Container> class back_insert_iterator;
後向插入迭代器

後向插入迭代器是特殊的輸出迭代器,它們允許通常用於覆蓋元素的演算法(例如copy)改為在容器的末尾插入新元素。

該容器需要有一個push_back成員函式(例如標準容器vectordequelist)。

back_insert_iterator使用賦值運算子(在解引用時或不解引用時),都會導致容器擴充套件一個元素,該元素使用賦給它的值進行初始化。

back_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 back_insert_iterator :
    public iterator<output_iterator_tag,void,void,void,void>
{
protected:
  Container* container;

public:
  typedef Container container_type;
  explicit back_insert_iterator (Container& x) : container(&x) {}
  back_insert_iterator<Container>& operator= (typename Container::const_reference value)
    { container->push_back(value); return *this; }
  back_insert_iterator<Container>& operator* ()
    { return *this; }
  back_insert_iterator<Container>& operator++ ()
    { return *this; }
  back_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 back_insert_iterator :
    public iterator<output_iterator_tag,void,void,void,void>
{
protected:
  Container* container;

public:
  typedef Container container_type;
  explicit back_insert_iterator (Container& x) : container(&x) {}
  back_insert_iterator<Container>& operator= (const typename Container::value_type& value)
    { container->push_back(value); return *this; }
  back_insert_iterator<Container>& operator= (typename Container::value_type&& value)
    { container->push_back(std::move(value)); return *this; }
  back_insert_iterator<Container>& operator* ()
    { return *this; }
  back_insert_iterator<Container>& operator++ ()
    { return *this; }
  back_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 back_insert_iterator :
    public iterator<output_iterator_tag,void,void,void,void>
{
protected:
  Container* container;

public:
  typedef Container container_type;
  explicit back_insert_iterator (Container& x) : container(std::addressof(x)) {}
  back_insert_iterator<Container>& operator= (const typename Container::value_type& value)
    { container->push_back(value); return *this; }
  back_insert_iterator<Container>& operator= (typename Container::value_type&& value)
    { container->push_back(std::move(value)); return *this; }
  back_insert_iterator<Container>& operator* ()
    { return *this; }
  back_insert_iterator<Container>& operator++ ()
    { return *this; }
  back_insert_iterator<Container> operator++ (int)
    { return *this; }
};

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

模板引數

容器
一個具有定義的push_back成員的容器類(例如標準容器vectordequelist)。

成員型別

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

成員函式

建構函式
back_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
// back_insert_iterator example
#include <iostream>     // std::cout
#include <iterator>     // std::back_insert_iterator
#include <vector>       // std::vector
#include <algorithm>    // std::copy

int main () {
  std::vector<int> foo, bar;
  for (int i=1; i<=5; i++)
  { foo.push_back(i); bar.push_back(i*10); }

  std::back_insert_iterator< std::vector<int> > back_it (foo);

  std::copy (bar.begin(),bar.end(),back_it);

  std::cout << "foo:";
  for ( std::vector<int>::iterator it = foo.begin(); it!= foo.end(); ++it )
	  std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

輸出

foo: 1 2 3 4 5 10 20 30 40 50


另見