所以我有这个结构:
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
并且初始化。
但sum
和language
也是向量,出于某种原因,我无法编译上述内容,因为我得到了这个:
错误C2661:&#39;
std::vector<int,std::allocator<_Ty>>::push_back
&#39;:没有重载的函数需要0个参数
我知道第一个向量中的vector<vector<type>>
个push_back
个元素,当它已满时,您将push_back
整个向量放入另一个向量中。
在这里,我无法做到这一点,因为sum
和lang
不会被认为是结构之外的独立。
我应该如何填充sum
而不是?
答案 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`);