繁体   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