簡體   English   中英

使用賦值運算符時分配免費 std::vector 副本

[英]Allocation free std::vector copy when using assignment operator

當有兩個原始數據類型的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;

我只發現“否則,*this 擁有的 memory 可能會在可能的情況下被重復使用。” (C++11 起)在cppreference.com上。 我希望是“必須”而不是“可以”。

如果對於更一般的情況(例如“相同大小就足夠”)應該有肯定的答案,那就更好了。

如果不能保證,這種情況可能是Copying std::vector: prefer assignment or std::copy?的答案。 ,當首選std::copy時。

標准不保證不會有分配。 根據C++11 標准b = a; 就好像b.assign(a.begin(), a.end()) (b 的剩余元素被銷毀,如果有的話)結果是“用 [a.begin(), a.結束())” 與分配無關,但使用C++20 標准(可能更早)我們有一個附加聲明: “使所有引用 b 的元素的引用、指針和迭代器無效” 這意味着分配是可能的,並且在這些保證中的任何地方都沒有提到capacity()以防止在您的特定情況下發生這種情況。

另一方面,實際上,如果已經足夠了,為什么還要重新分配 memory?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM