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

std :: map + std :: tr1 :: bind +标准算法值得吗?

如何解决《std::map+std::tr1::bind+标准算法值得吗?》经验,为你挑选了2个好方法。

这是我昨天提出的问题的后续行动.我有斯科特迈耶斯关于我写的只写代码的警告.我喜欢原则上使用标准算法来访问std :: map的键或值的想法,但所需的语法是一个小的巴洛克式恕我直言.假设我想将地图的所有键都转储到矢量中.鉴于以下声明,

typedef std::map MyMap;
MyMap m;
std::vector v;

哪些代码更易于维护(即可能更少混淆)?

选项1:

std::transform(m.begin(),
               m.end(),
               std::back_inserter(v),
               std::tr1::bind(&MyMap::value_type::first, _1));

选项#2:

for (MyMap::iterator i = m.begin(); i != m.end(); ++i)
{
    v.push_back(i->first);
}

选项1是更标准的库,但我必须在精神上分解它以了解正在发生的事情.选项2似乎更容易阅读,代价是可能的小运行时惩罚.我没有因为CPU时间而受伤所以我倾向于选项2.你们同意吗?我应该考虑第三种选择吗?

PS在编写这个问题的过程中,我得出结论,读取std :: map键的最佳方法(对于我的项目)是将它们存储在一个侧容器中并迭代它.可维护性问题仍然存在.



1> Drew Dormann..:

清晰度总是很聪明.做你以后可以阅读的内容.

你并不是唯一一个认为标准代码有点迟钝的人.下一个C++标准将引入lambda函数,因此您可以使用标准算法编写更易读的代码.



2> Head Geek..:

第一个与第二个一样可读和可维护 - 如果你知道是什么bind.我一直在使用Boost :: Bind(基本上相同std::tr1::bind)足够长,以至于我没有遇到麻烦.

一旦TR1成为官方标准的一部分,您可以放心地假设任何有能力的C++程序员都会理解它.在那之前,它可能会带来一些困难,但我总是想到短期内的长期问题.

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