编译时向量下标超出范围

pat*_*pat 7 c++

int i = 0;
int j = 0;

vector<vector<int>> normal;
vector< vector<int> >::iterator row;
vector<int>::iterator col;

for (i = 1; i < 10; i++) {
    for (j = 1; j < 10; j++) {
         normal[i].push_back(j);

    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释我做错了什么吗?在编译过程中,我收到错误“矢量下标超出范围”

Sco*_*ter 10

你从来没有任何元素添加到normal尝试使用之前normal[i]


Bra*_*yer 6

你没有放入任何东西normal。在你往里面放东西之前,它一直是一个空向量。

你可以通过每次迭代给它一个新值来解决这个问题

for (i = 0; i < 10; i++) {
    normal.push_back(vector<int>());
    for (j = 0; j < 10; j++) {
         normal[i].push_back(j);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,您的ij被初始化为1,但我相当确定您的意思是0。我在我的片段中解决了这个问题。

  • 或更好; 不要在此用例中使用嵌套的“向量”。考虑将 `std::vector&lt;std::array&lt;int,10&gt;&gt;` 作为平面数组的向量。您不需要指向指针的指针,并且所有行的长度都相同,因此不需要为每一行分配单独的内存。 (2认同)

小智 6

矢量法线为空。您可以按如下方式初始化向量。

vector<vector<int>> normal(10, vector<int>());
Run Code Online (Sandbox Code Playgroud)