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