一个向量的大小为 0,直到您告诉它调整大小,或者除非您使用特定大小对其进行初始化。创建向量时传入向量的大小:
for(int i=1;i<112;i++){
n_2.push_back(vector<struct nodo>(112-i));
for(int j=1;j<112-i;j++){
n_2[i][j].last_prod=j;
}
}
此外,您似乎正在跳过第 0 个索引,这意味着您的数组中的第一个值将被跳过。这可能是不希望的。
最后,如果您的数组是一个固定大小,请考虑使用std::array而不是 std::vector。请注意,std::array 是 C++11 功能,可能不可用,具体取决于您的编译器。
如果我正在编写这段代码,我可能会这样写:
#include <array>
using namespace std;
// allocate an array of 112 <struct nodo> arrays, each of size 112
array<array<struct nodo, 112>, 112> n_2;
for (int i = 0; i < 112; i++)
{
for (int j = 0; j < 112; j++)
{
n_2[i][j].last_prod = j;
}
}
或者,如果我没有支持 C++11 的编译器:
#include <vector>
using namespace std;
// allocate a vector of size 112 of <struct nodo> vectors, each of size 112
vector<vector<struct nodo> > n_2(112, vector<struct nodo>(112));
for (int i = 0; i < 112; i++)
{
for (int j = 0; j < 112; j++)
{
n_2[i][j].last_prod = j;
}
}
更理想的是,您应该使用 1 维向量,并将其简单地视为 2 维向量。这样,您可以一次进行一次内存分配,而不是 112 次较小的分配。这变得非常挑剔,但显然 O(1) 解决方案优于 O(n) 解决方案,而 O(n) 解决方案在分配方面优于 O(n^2) 解决方案,因为分配速度很慢。