簡體   English   中英

如何初始化向量的向量結構?

[英]how to initialize a vector struct of vectors?

所以我有這個結構:

struct lang_accuracy{ 
    std::vector<int> sum;
    vector<string> language;
};

和這個向量的類型結構

vector<lang_accuracy> s;

...
for (int i = 0;...)
{
  s.push_back(lang_accuracy());
  for (int k = 0;...)
  {  
      s[i].sum.push_back(); // `<- error`
      s[i].sum[k]=`some integer value`;
  }
  s[i].language.push_back(); // `<- error`
  s[i].language[i] = `some string`;
}

因此,由於我的結構中有2個向量,因此必須首先在s使用push_back分配更多的內存,而不是對vector s元素i進行初始化。 但是sumlanguage也是向量,由於某種原因,我無法編譯上面的代碼,因為我得到了:

錯誤C2661:' std::vector<int,std::allocator<_Ty>>::push_back ::: std::vector<int,std::allocator<_Ty>>::push_back ':沒有重載函數接受0個參數

我知道在vector<vector<type>>的情況下,您將第一個向量中的push_back元素壓入,當它滿了時,您push_back整個向量push_back壓入另一個。 在這里我不能這樣做,因為sumlang在struct之外未被識別為獨立的。

我該如何計算sum

錯誤非常明顯。 您沒有為push_back提供任何內容來添加到向量中。

例如,要添加sum您應該首先指定要添加的內容:

s[i].sum.push_back(42); // add 42 to `sum`

最好使用emplace_back提供值,這樣就不會涉及任何臨時任務:

s.emplace_back();
for (int k = 0;...)
{  
    s[i].sum.emplace_back(42);
}
s[i].language.emplace_back("whatever");

函數vector<T>::push_back(T)並不是主要用於分配內存,而是用於在向量的后面添加一個項目(並在必要時為該項目分配更多的內存)。

無需使用兩步方法,只需一個即可:

s[i].sum.push_back(`some integer value`);

暫無
暫無

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

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