当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为成对容器的第一个元素提供迭代器》经验,为你挑选了1个好方法。

我有一个装满对的容器.我想使用STL泛型算法迭代它(在我的情况下,它将是inner_product,但将其视为一般问题).我正在使用的算法首先要求使用迭代器.我可以首先提供特殊的迭代器,并且不会在对上迭代,而是在每对的第一个元素上迭代吗?

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



1> Johannes Sch..:

我环顾四周,发现了boost::transform_iterator.我想出了这个代码.令人惊讶的是它的工作原理:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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

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

}

它打印"1 2 "到标准输出.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有