当具有原始数据类型的两个实例std::vector具有相同的大小和容量时,是否可以保证通过复制赋值运算符进行复制不会重新分配目标向量?
例子:
const int n = 3;
std::vector<int> a, b;
// ensure defined capacity
a.reserve(n);
b.reserve(n);
// make same size
a.resize(n);
b.resize(n);
// set some values for a
for (int i = 0; i < n; i++)
{
a[i] = i;
}
// copy a to b: allocation free?
b = a;
Run Code Online (Sandbox Code Playgroud)
我只发现“否则,*this 拥有的内存可能会在可能的情况下被重用。” (自 C++11 起)位于cppreference.com。我希望是“必须”而不是“可能”。
如果对于更一般的情况(例如“相同大小就足够了”)应该有一个肯定的答案,那就更好了。
如果没有保证,这种情况可能是复制 std::vector: 更喜欢赋值或 std::copy?的答案。,什么时候std::copy会首选。