当有两个具有原始数据类型的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;
我只在cppreference.com上找到了"否则,*this拥有的内存可能会在可能的情况下被重用"(自C++11起)。我希望看到的是“必须”而不是“可能”。
如果对于更一般的情况(例如“相同大小足够”)应该有一个积极的答案,那就更好了。
如果没有保证,这种情况可能是回答Copying std::vector: prefer assignment or std::copy?的答案,当使用
std::copy
时会更好。
capacity()
没有超过时会有任何分配的实现。另一方面,为什么标准会做出这样的保证呢?看起来没有必要。 - ixScib.resize(n)
?同时将a[i] = i
替换为a.emplace_back(i)
,这样你也可以省略a.resize(n)
。 - Goswin von Brederlowpush_back
,然后认为resize
对于两者都更好看,甚至在视觉上显示a
和b
的情况相同。这与实际问题无关。 - Pedro