Boost.Foreachでは、逆参照されたイテレータへの参照は、Boost.Foreachが設計したものであるため、かなり参考になっています。範囲内の要素へのアクセスを簡素化します。しかし、あなたはちょうどあなたがstd::find_if()
をしようとする場合があります基準を満たす単一の要素を探している場合:
struct criteria {
template <class T>
bool operator()(T const & element) const {
return (element /* apply criteria... */)? true : false;
}
};
// somewhere else
List::iterator savedIterator =
std::find_if(list.begin(), list.end(), criteria());
あなたはリスト全体に対して操作を適用するようにまた見える - 私はその場合には、 std::min_element()
またはstd::max_element()
と、boost::transform_iterator
のようなBoost.Iteratorsのようなものを使用することをお勧めします。
struct transformation {
typedef int result_type;
template <class T>
int operator()(T const & element) const {
// stuff
int result = 1;
if (condition) result = 0;
// more stuff
return result;
}
};
// somewhere else
List::iterator savedIterator =
std::min_element(
boost::make_transform_iterator(list.begin(), transformation()),
boost::make_transform_iterator(list.end(), transformation()),
).base();
Upvoted、それは私が時々C++を憎むどれだけ私を思い出させるだけの理由。 – Roddy