template_Firstは、コピー元の最初の要素の反復子です。OutputIterator remove_copy_if( InputIterator _First, InputIterator _Last, OutputIterator _Result, Predicate _Pred );
これも、使い方は簡単です。 例題をみてみましょう。
// removecopyif01.cpp #include <iostream> #include <vector> #include <algorithm> bool chk(int); using namespace std; int main() { int i; vector<int>v1, v2(5); vector <int>::iterator p, e; for (i = 0; i < 5; i++) v1.push_back(i); e = remove_copy_if(v1.begin(), v1.end(), v2.begin(), chk); for (p = v2.begin(); p != e; p++) cout << *p << ","; cout << endl; return 0; } bool chk(int x) { if (x > 2) return true; else return false; }chk関数は、条件の判定を行います。これがtrueを返すものを 取り除いてコピーします。
では、実行結果を見てみましょう。
v1の要素のうち2より大きい要素を取り除いてv2にコピーしています。
従って、v2を表示すると0, 1, 2となるわけです。
コンテナではなく、普通の配列にも使えます。
// removecopyif02.cpp #include <iostream> #include <algorithm> using namespace std; bool chk(char); int main() { char szA[] = {'A', 'B', 'C', 'D', 'E'}, szB[5], *lpend, *lpB; int i; lpend = remove_copy_if(szA, szA + 4, szB, chk); for (i = 0; i < 5; i++) cout << szA[i] << ","; cout << endl; for (lpB = szB; lpB != lpend; lpB++) cout << *lpB << ","; cout << endl; return 0; } bool chk(char a) { if (a >= 'D') return true; else return false; }実行結果は次のようになります。
'D'以降の文字が取り除かれてコピーされています。
今回も簡単でした。
Update Jan/22/2006 By Y.Kumei