如何初始化向量的向量结构?
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
] 并初始化。
但是 sum
和 language
也是向量,出于某种原因,我无法编译上面的内容,因为我得到了这个:
error C2661: 'std::vector<int,std::allocator<_Ty>>::push_back
': no overloaded function takes 0 arguments
我知道在 vector<vector<type>>
的情况下,您 push_back
第一个向量中的元素,当它已满时,您 push_back
将整个向量放入另一个向量中。
在这里我不能这样做,因为 sum
和 lang
在结构之外不被识别为独立的。
我应该如何填充我的 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`);
所以我有这个结构:
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
] 并初始化。
但是 sum
和 language
也是向量,出于某种原因,我无法编译上面的内容,因为我得到了这个:
error C2661: '
std::vector<int,std::allocator<_Ty>>::push_back
': no overloaded function takes 0 arguments
我知道在 vector<vector<type>>
的情况下,您 push_back
第一个向量中的元素,当它已满时,您 push_back
将整个向量放入另一个向量中。
在这里我不能这样做,因为 sum
和 lang
在结构之外不被识别为独立的。
我应该如何填充我的 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`);