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

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

概述我有一个装满成对的容器.我想使用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”打印.

总结

以上是内存溢出为你收集整理的c – 为一对容器的第一个元素提供迭代器全部内容,希望文章能够帮你解决c – 为一对容器的第一个元素提供迭代器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存