第103章 remove_ifアルゴリズム関数を使う


remove_if関数は、元のソースの範囲から条件を満たす値の要素を取り除きます。戻り値が新しい配列の最後の次の要素を指します。



template
   ForwardIterator remove_if(
      ForwardIterator _First, 
      ForwardIterator _Last,
      Predicate _Pred
   );
_Firstは取り除き対象となる範囲の最初の要素を指す反復子です。

_Lastは取り除きたい章となる範囲の最後の次を指す反復子です。

_Predは、条件を記述した関数です。

では、早速サンプルを見てみましょう。

// removeif01.cpp

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

bool cond(int);

using namespace std;

int main()
{
	vector<int> v1, v2;
	vector<int>::iterator p1, p2, p3;

	int i;

	for (i = 0; i < 10; i++)
		v1.push_back(i);

	for (p1 = v1.begin(); p1 != v1.end(); p1++)
		cout << *p1 << ",";

	cout << endl;

	p2 = remove_if(v1.begin(), v1.end(), cond);

	for (p1 = v1.begin(); p1 != p2; p1++)
		cout << *p1 << ",";
	cout << endl;

	return 0;
}

bool cond(int x) {
	if (x % 2 == 0)
		return true;
	else
		return false;
}

実行結果は次の図のようになります。

条件の関数は、2で割り切れたらtrueを返すので偶数は除去されます。

結果は奇数のみが表示されるというわけです。



もちろん、コンテナだけでなく普通の配列に対しても使えます。

// removeif02.cpp

#include <iostream>
#include <algorithm>

bool cond(int);

using namespace std;

int main()
{
	int a[10], i;
	int *p, *end;

	for (i = 0; i < 10; i++)
		a[i] = i;

	for (i = 0; i < 10; i++)
		cout << a[i] << ",";

	cout << endl;

	end = remove_if(a, a + 10, cond);

	for (p = a; p != end; p++)
		cout << *p << ",";
	cout << endl;

	return 0;
}

bool cond(int x)
{
	if (x % 2 == 0)
		return true;
	else
		return false;
}

結果は前プログラムと同じです。

なんか、いろいろアルゴリズム関数はいっぱいありますが使い方そのものはたいしたことないですね。


[Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Apr/03/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。