[英]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
进行初始化。 但是sum
和language
也是向量,由于某种原因,我无法编译上面的代码,因为我得到了:
错误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
压入另一个。 在这里我不能这样做,因为sum
和lang
在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.