【问题标题】:Converting std::pair of iterators to boost::iterator_range将 std::pair 迭代器转换为 boost::iterator_range
【发布时间】:2012-04-27 15:30:24
【问题描述】:

我有一个std::multimap,我想从equal_range 创建一个boost::iterator_range。我在文档中发现没有简单的方法,所以我尝试了以下方法:

typedef std::multimap<int, std::string> Map;
Map map;
...
boost::iterator_range<Map::iterator> r(map.equal_range(2));

令人惊讶的是,它可以工作(使用 GCC 4.1.2)。我很好奇它是如何工作的。我发现 iterator_range 构造函数没有重载可以做到这一点,multimap::iterator_range 显然没有重载会返回 Boost 范围。

【问题讨论】:

  • 请注意,还有 boost::make_iterator_range 从该对中推断出底层迭代器类型。

标签: c++ boost iterator boost-range


【解决方案1】:

iterator_range_core.hpp:

//! Constructor from a Range
template< class Range >
iterator_range( const Range& r ) :
    m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
{}

impl::adl_begin 将您带到boost::begin。看看我们看到的begin.hpp(以及其他voodoo):

template< typename Iterator >
inline Iterator range_begin( const std::pair<Iterator,Iterator>& p )
{
    return p.first;
}

例如,如何将类型“适应”到范围中,请查看 here(他们使用 pair 作为示例)。

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多