【问题标题】:Boost range adaptors升压范围适配器
【发布时间】:2017-06-12 15:51:26
【问题描述】:

在查找算法中使用范围适配器时,我必须重复所有适配器链以获取相应的 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;
}

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

【问题讨论】:

  • 粘贴在变量中?
  • 嗯,这将是显而易见的解决方案,但我觉得它有点违背范围适配器的目的

标签: c++ boost range boost-range


【解决方案1】:

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

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

我没有对此进行测试,所以它可能无法编译,但你明白了。

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 2013-01-24
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2014-02-19
    • 2017-10-30
    相关资源
    最近更新 更多