隨着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 2009-06-09 19:03:38