• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++ - boost::range_iterator 和 boost::iterator_range 混淆

[复制链接]
菜鸟教程小白 发表于 2022-10-25 09:08:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我一直在浏览 boost::range 库并注意到 boost::range_iteratorboost::iterator_range。我在这里对这些术语感到困惑。谁能解释一下两者之间的区别以及何时使用什么?此外,如果您能指出我使用 boost range 库的示例示例来了解更多关于它的信息,那将是很好的。



Best Answer-推荐答案


Could anyone please explain what is the difference between two and when to use what?

range_iterator 用于获取范围迭代器的类型,方式如下:

range_iterator< SomeRange >::type

它类似于 std::iterator_traits .例如,您可以从迭代器中获取值类型:

std::iterator_traits<int*>::value_type

iterator_range 是范围和迭代器之间的桥梁。例如 - 你有一对迭代器,你想将它们传递给只接受范围的算法。在这种情况下,您可以使用 iterator_range 将迭代器包装到范围内。 .或者更好 - make_iterator_range - 这将有助于推断类型(就像 std::make_pair 所做的那样):

make_iterator_range(iterator1,iterator2)

返回范围。

考虑以下示例:

live demo

#include <boost/range/iterator_range.hpp>
#include <boost/range/algorithm.hpp>
#include <boost/range/iterator.hpp>
#include <typeinfo>
#include <iostream>
#include <ostream>

using namespace boost;
using namespace std;

struct print
{
    template<typename T>
    void operator()(const T &t) const
    {
        cout << t << " ";
    }
};

int main()
{
    typedef int Array[20];
    cout << typeid( range_iterator<Array>::type ).name() << endl;

    Array arr={11,22,33,44,55,66,77,88};
    boost::for_each( make_iterator_range(arr,arr+5) ,print());
}

Also, it would be nice if you can point me to sample examples where the boost range library is used to know more about it apart from the documentation

如需快速总结,请查看 this slides

关于c++ - boost::range_iterator 和 boost::iterator_range 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13286876/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap