- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我的 question from yesterday 的后续.我想到了 Scott Meyers 关于只写代码的警告。我原则上喜欢使用标准算法访问 std::map 的键或值的想法,但恕我直言,所需的语法有点巴洛克式。假设我想将 map 的所有键转储到 vector 中。鉴于以下声明,
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 的键的最佳方法是将它们存储在一个侧容器中并对其进行迭代。可维护性问题仍然存在。
最佳答案
清晰总是胜过聪明。做您以后可以阅读的内容。
认为标准代码有点迟钝的不止您一个。下一个 C++ 标准将介绍 lambda functions这样您就可以使用标准算法编写更清晰的代码。
关于c++ - std::map + std::tr1::bind + 标准算法是否值得?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376154/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!