升压范围适配器



在查找算法中使用范围适配器时,我必须重复所有适配器链才能获得相应的end((迭代器。 例如:

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;
}

有没有办法获得相应的结束迭代器而不必再次重复它?

太糟糕了,find调用通常以冗长结束 - STL甚至比Boost范围更糟糕。你可以引入一个小的辅助函数:

template<class SinglePassRange, class Value>
bool contains(SinglePassRange& rng, Value const &val) {
  return boost::find(rng, val) != rng.end();
}

我没有测试这个,所以它可能不会编译,但你明白了。

相关内容

  • 没有找到相关文章

最新更新