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

时间:2018-05-09 17:24:03

标签: c++ vector structure

所以我有这个结构:

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个向量,我必须首先在push_back中使用s分配更多内存,然后继续使用向量i的元素s并且初始化。 但sumlanguage也是向量,出于某种原因,我无法编译上述内容,因为我得到了这个:

  

错误C2661:&#39; std::vector<int,std::allocator<_Ty>>::push_back&#39;:没有重载的函数需要0个参数

我知道第一个向量中的vector<vector<type>>push_back个元素,当它已满时,您将push_back整个向量放入另一个向量中。 在这里,我无法做到这一点,因为sumlang不会被认为是结构之外的独立。

我应该如何填充sum而不是?

3 个答案:

答案 0 :(得分:4)

错误很明显。您没有向push_back提供任何内容以添加到矢量。

例如,要向sum添加内容,您应该首先指定要添加的内容:

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

答案 1 :(得分:2)

最好使用emplace_back提供价值,这样就不会涉及临时工具:

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

答案 2 :(得分:0)

函数vector<T>::push_back(T)主要不是用于分配内存,而是用于向向量的后面添加项(如果需要,为该项分配更多内存)。

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

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