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());
당신이 전체 목록에 대한 작업을 적용 할 것 또한 보이는 - 어떤 경우에는 내가 ' boost::transform_iterator
과 같은 Boost.Iterators와 함께 std::min_element()
또는 std::max_element()
과 같은 것을 사용하는 것이 좋습니다. 사람들이 이렇게하지 않는 이유
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