gpt4 book ai didi

c++ - std::map + std::tr1::bind + 标准算法是否值得?

转载 作者:可可西里 更新时间:2023-11-01 18:04:18 27 4
gpt4 key购买 nike

这是我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com