template_Firstは、コピー元の範囲の最初の要素OutputIterator remove_copy( InputIterator _First, InputIterator _Last, OutputIterator _Result, const Type& _Val );
_Lastは、コピー元の範囲の最後の次
_Resultは、コピー先の最初の反復子
_Valは、範囲から取り除く値
では、さっそくプログラムを見てみましょう。
// removecopy01.cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v1, v2(10); vector<int>::iterator pv1, pv2; int i; for (i = 0; i < 10; i++) v1.push_back(i); cout << "v1----"; for (pv1 = v1.begin(); pv1 != v1.end(); pv1++) cout << *pv1 << ", "; cout << endl; pv2 = v2.begin(); remove_copy(v1.begin(), v1.end(), pv2, 4); cout << "v2----"; for (pv2 = v2.begin(); pv2 != v2.end(); pv2++) cout << *pv2 << ", "; cout << endl; return 0; }では、結果を見てみましょう。
v2に4を除いて、順番通りコピーされています。
もちろん、コンテナだけでなく普通の配列に対しても使うことができます。
// removecopy02.cpp #include <iostream> #include <algorithm> using namespace std; int main() { int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, i; static int arr2[10]; cout << "arr1---"; for (i = 0; i < 10; i++) cout << arr1[i] << ", "; cout << endl; remove_copy(arr1, arr1 + 10, arr2, 3); cout << "arr2---"; for (i = 0; i < 10; i++) cout << arr2[i] << ", "; cout << endl; return 0; }ここで、
remove_copy(arr1, arr1 + 10, arr2, 3);の中のarr1 + 10は配列arr1の範囲の最後の次を指している点に注意してください。
実行結果は次のようになります。
Update Dec/04/2005 By Y.Kumei