algorithm としての std::move

Twitter で教えてもらったので覚書。
std::move というと rvalue reference にキャストする関数の方が有名だと思うんですが、sequence の要素を move する algorithm があります。
std::copy の move 版ですね。
使い方も std::copy を同じです。

[ソース]

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

int
main(){
    std::vector<std::unique_ptr<int>> v;

    for(int n = 0 ; n < 5 ; ++n){
        v.emplace_back(new int(n));
    }
    
    std::vector<std::unique_ptr<int>> v2(v.size());

    std::move(v.begin(), v.end(), v2.begin());

    for(auto&& p : v2){
        std::cout << *p << std::endl;
    }

    return 0;
}

[出力]

0
1
2
3
4

[コンパイラ]

  • g++ (GCC) 4.8.0 20120415 (experimental)