最終更新日時:
が更新

履歴 編集

class template
<iterator>

std::move_iterator(C++11)

namespace std {
  template <class Iterator>
  class move_iterator;
}

概要

move_iteratorは、イテレータをラップし、間接参照時に参照先の要素をムーブするイテレータアダプタである。その他の操作は、元のイテレータそのものの動作をする。

要件

move_iteratorクラスのテンプレートパラメータIteratorは、入力イテレータの要件を満たすこと。双方向またはランダムアクセスの横断を必要とする操作を行う場合は、それぞれ双方向イテレータまたはランダムアクセスイテレータの要件を満たすこと。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
~move_iterator() = default デストラクタ C++11
operator= 代入演算子 C++11
base 元のイテレータを取得する C++11
operator* 間接参照演算子 C++11
operator-> メンバアクセス演算子 C++11
operator++ イテレータをインクリメントする C++11
operator-- イテレータをデクリメントする C++11
operator+ イテレータを進める C++11
operator+= イテレータ自身を進める C++11
operator- イテレータを逆に進める C++11
operator-= イテレータ自身を逆に進める C++11
operator[] 任意の位置にランダムアクセスする C++11

メンバ型

名前 説明 対応バージョン
iterator_type Iterator C++11
difference_type iterator_traits<Iterator>::difference_type C++11
pointer Iterator C++11
value_type iterator_traits<Iterator>::value_type C++11
iterator_category iterator_traits<Iterator>::iterator_category C++11
reference value_type&& C++11

非メンバ関数

名前 説明 対応バージョン
operator== 等値比較 C++11
operator!= 非等値比較 C++11
operator< 左辺が右辺より小さいかの判定を行う C++11
operator<= 左辺が右辺以下かの判定を行う C++11
operator> 左辺が右辺より大きいかの判定を行う C++11
operator>= 左辺が右辺以上かの判定を行う C++11
operator- 2つのmove_iteratorの差を求める C++11
operator+ イテレータを進める C++11
make_move_iterator move_iteratorのヘルパ関数 C++11

#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
#include <iterator>

int main()
{
  std::vector<std::unique_ptr<int>> v;
  for (int i = 0; i < 5; ++i)
    v.emplace_back(new int(i));

  std::vector<std::unique_ptr<int>> v2;
  v2.assign(std::make_move_iterator(v.begin()),
            std::make_move_iterator(v.end()));

  std::for_each(v2.begin(), v2.end(),
    [](const std::unique_ptr<int>& v) { std::cout << *v << std::endl; });
}

出力

0
1
2
3
4

バージョン

言語

  • C++11

処理系

参照