【发布时间】:2014-06-17 09:52:07
【问题描述】:
假设我写
std::vector<T> littleVector(1);
std::vector<T> bigVector;
bigVector.reserve(100);
bigVector = littleVector;
标准是否规定bigVector 仍将保留 100 个元素?或者如果我要使用push_back 99 个元素,我会经历内存重新分配吗?也许它甚至因 STL 实现而异。
这在之前讨论过here,但没有给出标准参考。
【问题讨论】:
-
@davidhigh:是的,它会回答我的特定编译器和 STL 实现的问题,但我也可以用类似的方式回答“
i = i++做了什么”之类的问题。 -
非常好的问题,+1。我在标准中找不到任何直截了当的内容。不过,分配器要求的黑暗魔法可能会带来一些东西。
-
在 MSVC 中,它似乎保持正确的保留,除非 littleVector 有超过 100 个对象。
-
我的编译器 (msvc12) 将容量保持在 100。
-
g++实现明确记录了容量是不复制的;此外,标准明确要求assign等同于erase,后跟insert(不受源capacity的影响)。 OTOH,我发现标准中没有规定operator=的行为方式与assign相同。
标签: c++ language-lawyer