加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为一对容器的第一个元素提供迭代器

发布时间:2020-12-16 03:17:15 所属栏目:百科 来源:网络整理
导读:我有一个装满成对的容器.我想使用STL通用算法来迭代(在我的情况下,它将是inner_product,但将其视为一个通用问题). 我使用的算法首先要求迭代器.我可以提供特殊的迭代器,首先和最后一个不会在对上迭代,而是在每对的第一个元素上迭代? 我知道我可以手动执行,
我有一个装满成对的容器.我想使用STL通用算法来迭代(在我的情况下,它将是inner_product,但将其视为一个通用问题).
我使用的算法首先要求迭代器.我可以提供特殊的迭代器,首先和最后一个不会在对上迭代,而是在每对的第一个元素上迭代?

我知道我可以手动执行,提供一个手工的函数对象,它将是标准容器迭代器周围的包装器,将它引用到对本身的对象的第一个成员,但我认为还有一个聪明的为我做这件事会是什么?

解决方法

我看了一下,发现了boost :: transform_iterator.我已经提出了这个代码.令人惊讶的是它的效果如何:
#include <map>
#include <algorithm>
#include <iostream>
#include <string>
#include <iterator>
#include <boost/iterator/transform_iterator.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>

int main() {
    typedef std::map<std::string,int>::value_type value_type;
    std::map<std::string,int> a;
    a["one"] = 1;
    a["two"] = 2;

    // returns the second element 
    boost::function<int(value_type&)> f = boost::bind(&value_type::second,_1);
    std::copy(boost::make_transform_iterator(a.begin(),f),boost::make_transform_iterator(a.end(),std::ostream_iterator<int>(std::cout," "));

}

它将标准输出“1 2”打印.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读