【发布时间】:2013-10-15 16:48:34
【问题描述】:
我已经建立了一个解释现象的理论,但我希望有更博学的人来支持我。
在客户端代码中,我有:
vector<bool> candidates;
fillCandidates(candidates);
在被调用者中,我有:
void fillCandidates(vector<bool>& candidates)
{
// reserve space for two elements
candidates.reserve(2);
candidates[0] = true;
candidates[1] = false;
// here, candidates.size() == 0
}
当我在函数返回后检查候选者的大小时,它是0!发生了什么?我在 Ubuntu 12.04 64 位上使用在 CMake 脚本中调用的 gcc 4.6.3(但我认为所有这些实际上都无关紧要)。
注意:我提供我的解释作为答案。
编辑:接受的答案和 cmets 在时间上击败了我,所以我的解释不会添加任何东西。
【问题讨论】:
-
-
FWIW,只有当计数很高并且事先知道时,才执行
reserve更合适。调用resize然后覆盖元素的性能通常较差,除了 POD/内置。如果您可以使用 C++11,则在大多数情况下执行emplace_back是合适的并且也很高效。 -
@legends2k:您能否指出您关于
emplace_back性能的声明的来源?这很有趣。 -
@sturmer: push_back vs emplace_back
-
@legends2k 非常感谢