这是我昨天提出的问题的后续。我想到了 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。你们同意吗?我应该考虑第三种选择吗?
PS 在写这个问题的过程中,我得出的结论是(对于我的项目)读取 std::map 的键的最佳方法是将它们存储在一个侧面容器中并对其进行迭代。可维护性问题仍然存在。