如何初始化向量的向量结构?

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 分配更多内存,然后继续向量 [=13= 的元素 i ] 并初始化。 但是 sumlanguage 也是向量,出于某种原因,我无法编译上面的内容,因为我得到了这个:

error C2661: 'std::vector<int,std::allocator<_Ty>>::push_back': no overloaded function takes 0 arguments

我知道在 vector<vector<type>> 的情况下,您 push_back 第一个向量中的元素,当它已满时,您 push_back 将整个向量放入另一个向量中。 在这里我不能这样做,因为 sumlang 在结构之外不被识别为独立的。

我应该如何填充我的 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)主要不是为了分配内存,而是为了在vector的后面添加一个项目(并在必要时为该项目分配更多内存)。

您只需要一个步骤,而不是您的两步法:

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