这是我昨天关于问题的跟进。我心中一直有Scott Meyers关于只写代码的警告。原则上,我喜欢使用标准算法来访问std::map的键或值的想法,但我认为所需的语法有点拗口。假设我想将映射的所有键转储到向量中。给定以下声明,
typedef std::map<int, int> MyMap;
MyMap m;
std::vector<int> 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。你们同意吗?还有我应该考虑的第三个选项吗?
附言:在撰写此问题的过程中,我得出结论,最好的方法(对于我的项目)是将std::map的键存储在一个侧面容器中,并在其上进行迭代。然而,可维护性问题仍然存在。