在find算法中使用范围适配器时,我必须重复所有适配器链以获取相应的end()迭代器。 e.g:
std::vector<size_t> numbers = { 10, 11, 12, 13, 14, 2, 1, 3,3,50, 55} ;
if ( find(numbers|reversed,99) != (numbers|reversed).end() )
//^adaptor chain repeated
{
std::cout << "FOUND!!!!!" << std::endl;
}
有没有办法获得相应的结束迭代器而不必再重复一次?
答案 0 :(得分:1)
太糟糕了,find
通话最终会变得冗长 - STL比使用Boost范围更糟糕。你可以介绍一个小帮手功能:
template<class SinglePassRange, class Value>
bool contains(SinglePassRange& rng, Value const &val) {
return boost::find(rng, val) != rng.end();
}
我没有对此进行测试,因此它可能无法编译,但您明白了。