最終更新日時(UTC):
が更新

履歴 編集

class template
<iterator>

std::move_iterator(C++11)

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

概要

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

要件

move_iteratorクラスのテンプレートパラメータIteratorは、入力イテレータの要件を満たすかinput_iteratorのモデルであること。
さらに、双方向またはランダムアクセスの横断を必要とする操作を行う場合は、それぞれ双方向イテレータまたはランダムアクセスイテレータの要件を満たすか、それぞれbidirectional_iteratorまたはrandom_access_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

メンバ型

C++17まで

名前 説明 対応バージョン
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

C++20

名前 説明 対応バージョン
iterator_type Iterator C++11
difference_type iter_difference_t<Iterator> C++20
pointer Iterator C++11
value_type iter_value_t<Iterator> C++20
iterator_category iterator_traits<Iterator>::iterator_category
ただし、contiguous_iterator_tagとなるときはrandom_access_iterator_tag
C++20
iterator_concept input_iterator_tag C++20
reference iter_rvalue_reference_t<Iterator> C++20

非メンバ関数

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

move_sentinelとの間の操作

名前 説明 対応バージョン
operator== 等値比較 C++20
operator!= 非等値比較(==により使用可能) C++20
operator- move_iteratorと終端との差を求める C++20

#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

処理系

参照