Mic*_*fik 7 c++ algorithm stl bind
这是我昨天提出的问题的后续行动.我有斯科特迈耶斯关于我写的只写代码的警告.我喜欢原则上使用标准算法来访问std :: map的键或值的想法,但所需的语法是一个小的巴洛克式恕我直言.假设我想将地图的所有键都转储到矢量中.鉴于以下声明,
typedef std::map<int, int> MyMap;
MyMap m;
std::vector<int> v;
Run Code Online (Sandbox Code Playgroud)
哪些代码更易于维护(即可能更少混淆)?
选项1:
std::transform(m.begin(),
m.end(),
std::back_inserter(v),
std::tr1::bind(&MyMap::value_type::first, _1));
Run Code Online (Sandbox Code Playgroud)
选项#2:
for (MyMap::iterator i = m.begin(); i != m.end(); ++i)
{
v.push_back(i->first);
}
Run Code Online (Sandbox Code Playgroud)
选项1是更标准的库,但我必须在精神上分解它以了解正在发生的事情.选项2似乎更容易阅读,代价是可能的小运行时惩罚.我没有因为CPU时间而受伤所以我倾向于选项2.你们同意吗?我应该考虑第三种选择吗?
PS在编写这个问题的过程中,我得出结论,读取std :: map键的最佳方法(对于我的项目)是将它们存储在一个侧容器中并迭代它.可维护性问题仍然存在.
第一个与第二个一样可读和可维护 - 如果你知道是什么bind.我一直在使用Boost :: Bind(基本上相同std::tr1::bind)足够长,以至于我没有遇到麻烦.
一旦TR1成为官方标准的一部分,您可以放心地假设任何有能力的C++程序员都会理解它.在那之前,它可能会带来一些困难,但我总是想到短期内的长期问题.