すべて見つけfind_ifの代替バージョン、単に最初ではありませんか?
質問
std::find_if
の代替バージョンが戻って見つかったすべての要素の反復子の代わりに、ちょうど最初の1ということはありますか?
例:
bool IsOdd (int i) {
return ((i % 2) == 1);
}
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
std::vector<int>::iterator it = find_if(v.begin(), v.end(), IsOdd);
for(; it != v.end(); ++it) {
std::cout << "odd: " << *it << std::endl;
}
解決
あなただけのfor
ループを使用することができます
for (std::vector<int>:iterator it = std::find_if(v.begin(), v.end(), IsOdd);
it != v.end();
it = std::find_if(++it, v.end(), IsOdd))
{
// ...
}
また、あなたはファンクタ(条件がtrueの場合にのみ、アクションを実行する)だけ使用std::foreach
にあなたの条件とアクションを置くことができます。
他のヒント
STLでありませんが、ブーストは、このfuncionalityを提供しています。
まず、常に一般的なSTLの使用自体を思い付くしようとすると、同様に、ブーストのために行くことができます。ここではより多くのチャールズが言及した答えを上からフォームを簡素化されます。
vec_loc = find_if(v3.begin(), v3.end(), isOdd);
if (vec_loc != v3.end())
{
cout << "odd elem. found at " << (vec_loc - v3.begin()) << "and elem found is " << *vec_loc << endl;
++vec_loc;
}
for (;vec_loc != v3.end();vec_loc++)
{
vec_loc = find_if(vec_loc, v3.end(), isOdd);
if (vec_loc == v3.end())
break;
cout << "odd elem. found at " << (vec_loc - v3.begin()) << "and elem found is " << *vec_loc << endl;
}
所属していません StackOverflow