「std::copy backward」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「std::copy_backward とは、C++で指定範囲をコピーするアルゴリズムです。std::vectorをコピーするときなどに使われます。[[s...」)
 
(相違点なし)

2014年1月3日 (金) 14:35時点における最新版

std::copy_backward とは、C++で指定範囲をコピーするアルゴリズムです。std::vectorをコピーするときなどに使われます。std::copyとは違い、第3引数にコピー先の最後を指定し、第3引数の位置から第2引数で指定した範囲から第1引数に向かってコピーします。つまり、後ろ向きにコピーされていきます。

読み方

std::copy_backward
えすてぃーでぃー こぴー ばっくわーど

概要

std::copyでは、コピー元と同じ順番で、コピー先に並べます。コピー元と逆向きに並べる場合には、std::reverse_copyを使用します。 std::copy_backwardは、コピー先の終端からコピー元の最後からコピーしていきます。前方からコピーするのと結果が変わる場合に、用います。

endからfirstまでをresultの位置を最後の位置としてコピーします。

std::copy_backward(first, end, result);

以下の関数テンプレートと同じような振る舞いをします。

template<class BidirectionalIterator1, class BidirectionalIterator2>
  BidirectionalIterator2 copy_backward ( BidirectionalIterator1 first,
                                         BidirectionalIterator1 last,
                                         BidirectionalIterator2 result )
{
	while (last!=first) {
		*(--result) = *(--last);
	}
	return result;
}

後ろから前方に向かって、コピーします。 resultの位置から前方に向かって、コピーされます。

vector_copy_backward1.cpp の例

ソースコード vector_copy_backward1.cpp

#include <iostream>
#include <vector>
#include <algorithm>    // std::copy_backward
using namespace std;
int main(int argc, char const* argv[])
{
        vector<int> v1,v2;
        // 0,1,2,3,4
        // ^     ^
        for(int i = 0;i<5;i++) {
                v1.push_back(i);
        }
        copy_backward(v1.begin(), v1.end() - 1, v1.end() );
        for(auto i:v1) {
                cout << i << " ";
        }
        cout << endl;
        return 0;
}

コンパイル

g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
-Wl,-rpath=/usr/local/lib/gcc49  vector_copy_backward1.cpp -o vector_copy_backward1

実行例

% ./vector_copy_backward1
0 0 1 2 3

関連項目