gpt4 book ai didi

c++ - std::vector::emplace_back 比 std::vector::push_back 慢的示例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:53 25 4
gpt4 key购买 nike

我目前正在阅读 Scott Meyer 的“Effective Modern C++”。在第 42 项中,他声称,例如std::vector::emplace_back 通常(但不总是)与使用 push_back 一样快,甚至更快。他列出了三个条件,在这些条件下它至少应该一样快,但没有提供在这些条件不全部满足的情况下的反例。有人可以给我提供一个示例,说明使用 emplace_back 会导致比使用 push_back 更差的性能吗?

最佳答案

这取决于您所说的“emplace_backpush_back 慢”是什么意思。考虑构造成本高而复制成本低的类,例如具有写时复制行为的类,或表示哈希值的类:

class Hash {
public:
int value;
Hash(const char *data) : value(very_expensive_hash_function(data)) {} // expensive
Hash(const Hash &other) : value(other.value) {} // cheap
};
Hash h(foo);
std::vector<Hash> v;

v.push_back(h); // 1
v.emplace_back("foo"); // 2

那么,(1) 确实会比 (2) 快。然而,这样的比较并不公平。比较性能时,应考虑所涉及的构造函数的成本。

关于c++ - std::vector::emplace_back 比 std::vector::push_back 慢的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941695/

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