名前空間
変種
操作

std::move_iterator

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータコンセプト
イテレータプリミティブ
イテレータアダプタ
ストリームイテレータ
イテレータのカスタマイゼーションポイント
イテレータ操作
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
 
ヘッダ <iterator> で定義
template< class Iter >
class move_iterator;
(C++11以上)

std::move_iterator は、逆参照がベースとなるイテレータから返された値を右辺値に変換することを除いて、ベースとなるイテレータ (少なくとも LegacyInputIterator でなければなりません) とまったく同様に振る舞うイテレータアダプタです。 このイテレータが入力イテレータとして使用された場合、その効果は値をコピーするのではなくムーブします。

目次

[編集] メンバ関数

メンバ型 定義
iterator_type Iter
iterator_category

std::iterator_traits<Iter>::iterator_category

(C++20未満)

std::iterator_traits<Iter>::iterator_categorystd::derived_from<std::random_access_iterator_tag> をモデル化する場合は std::random_access_iterator_tag、そうでなければ無変更の std::iterator_traits<Iter>::iterator_category

(C++20以上)
iterator_concept
(C++20以上)
std::input_iterator_tag
value_type

std::iterator_traits<Iter>::value_type

(C++20未満)

std::iter_value_t<Iter>

(C++20以上)
difference_type

std::iterator_traits<Iter>::difference_type

(C++20未満)

std::iter_difference_t<Iter>

(C++20以上)
pointer Iter
reference

value_type&&

(C++17未満)

std::iterator_traits<Iter>::reference が参照の場合は同じ型の右辺値参照、そうでなければ (ラップされたイテレータが値で返す場合など) 無変更の std::iterator_traits<Iter>::reference

(C++17以上)
(C++20未満)

std::iter_rvalue_reference_t<Iter>

(C++20以上)

[編集] メンバ関数

新しいイテレータアダプタを構築します
(パブリックメンバ関数) [edit]
別のイテレータを代入します
(パブリックメンバ関数) [edit]
ベースとなるイテレータにアクセスします
(パブリックメンバ関数) [edit]
(C++20で非推奨)
イテレータの指す先の要素にアクセスします
(パブリックメンバ関数) [edit]
インデックスによって要素にアクセスします
(パブリックメンバ関数) [edit]
イテレータをインクリメントもしくはデクリメントします
(パブリックメンバ関数) [edit]

[編集] メンバオブジェクト

メンバ名 定義
current (private) base() イテレータのコピー
(説明専用)

[編集] 非メンバ関数

ベースとなるイテレータを比較します
(関数テンプレート) [edit]
ベースとなるイテレータとベースとなる番兵を比較します
(関数テンプレート) [edit]
イテレータを進めます
(関数テンプレート) [edit]
2つのイテレータアダプタ間の距離を計算します
(関数テンプレート) [edit]
ベースとなるイテレータとベースとなる番兵の間の距離を計算します
(関数テンプレート) [edit]
(C++20)
ベースとなるイテレータを逆参照した結果をその関連する右辺値参照型にキャストします
(関数テンプレート) [edit]
(C++20)
2つのベースとなるイテレータの指す先のオブジェクトを入れ替えます
(関数テンプレート) [edit]

[編集]

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <numeric>
#include <string>
 
int main()
{
    std::vector<std::string> v{"this", "is", "an", "example"};
 
    std::cout << "Old contents of the vector: ";
    for (auto& s : v)
        std::cout << '"' << s << "\" ";
 
    typedef std::vector<std::string>::iterator iter_t;
    std::string concat = std::accumulate(
                             std::move_iterator<iter_t>(v.begin()),
                             std::move_iterator<iter_t>(v.end()),
                             std::string());  // std::make_move_iterator を使えばもっと簡単にできます
 
    std::cout << "\nConcatenated as string: " << concat << '\n'
              << "New contents of the vector: ";
    for (auto& s : v)
        std::cout << '"' << s << "\" ";
    std::cout << '\n';
}

出力例:

Old contents of the vector: "this" "is" "an" "example"
Concatenated as string: thisisanexample
New contents of the vector: "" "" "" ""

[編集] 関連項目

引数から推定した型の std::move_iterator を作成します
(関数テンプレート) [edit]