【C++】標準コンテナでの範囲処理
コンテナが持つ値をイテレータを使用してループ処理ではなく
コンテナが持つメンバ関数の範囲処理で効率的に走査する
test.cpp
#include <iostream> #include <iterator> #include <vector> using namespace std; int main(int argc, char *argv[]) { auto show = [](const vector<int> &v) { copy(v.begin(), v.end(), ostream_iterator<int>(cout, " ")); cout << endl; }; vector<int> v1{ 0, 1, 2, 3, 4 }; vector<int> v2{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; vector<int> v3{ 0, 1, 2, 3, 4 }; // コンテナの要素を置き換える(入れ替えるではない!) v1.assign(v2.begin() + v2.size() / 2, v2.end()); show(v1); // 5 6 7 8 9 show(v2); // 0 1 2 3 4 5 6 7 8 9 // コンテナの要素を追加する v1.insert(v1.end(), v3.begin(), v3.end()); // NGコード // copy(v3.begin(), v3.end(), back_inserter(v1)); // for ループを使ったものより冗長ではないが copy 内部でループ処理しているので効率は上がらない // 挿入反復子によりコピー先範囲を指定するほとんどの場合、範囲メンバ関数の呼び出しに置き換えるべきである。 show(v1); // 5 6 7 8 9 0 1 2 3 4 getchar(); return 0; }
参考:Effective STL