簡體   English   中英

std :: vector是否可以=另一個std :: vector?

[英]Can a std::vector be ='d to another std::vector?

說我有以下內容:

std::vector<int> myints;

然后我有一個返回int向量的函數:

std::vector<int> GiveNumbers()
{
  std::vector<int> numbers;
for(int i = 0; i < 50; ++i)
{
  numbers.push_back(i);
}

return numbers;
}

我可以這樣做:

myints = GiveNumbers();

會安全地做到這一點,以便myint的數字為0到49而沒有別的嗎? 這樣做會清楚以前在myint中可能出現的情況嗎? 如果不是最正確的方法嗎?

謝謝

是。 這很安全。 您將把GiveNumbers()函數的結果復制到myints 它可能不是最有效的方法,但它是安全和正確的。 對於小向量,效率差異不會那么大。

是的,它將分配它,它將清除之前接收向量中的內容。

是的,事實上, GiveNumbers() return numbers是將向量復制到堆棧上。

當您使用operator= ,您將在新向量上獲得相同的內容

正如已經提到的,這是非常安全的,盡管不是最有效的方法。

為節省資源,最好通過引用傳遞矢量,並直接修改它。

void setNumbers(vector<int> &nums)
{
   nums.resize(50);
   for(int i = 0; i < 50; ++i)
   {
      nums[i] = i;
   }
}

正如還提到的那樣,效率可能不會對非常小的向量產生巨大差異,但是對於較大的向量實際上可能是實質性的。

通過直接修改原始向量獲得的節省有兩種方式:

  1. 節省內存(不創建臨時向量)
  2. 速度節省(僅迭代N次以在一次傳遞中設置矢量,而不是采用一次傳遞來設置臨時矢量,而第二次傳遞將它們復制到原始傳感器中)

暫無
暫無

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

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