gpt4 book ai didi

c++ - 将 std::pair 迭代器转换为 boost::iterator_range

转载 作者:可可西里 更新时间:2023-11-01 18:29:43 25 4
gpt4 key购买 nike

我有一个 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 范围的重载。

最佳答案

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 为例)。

关于c++ - 将 std::pair 迭代器转换为 boost::iterator_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10171807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com