C++ 在二维向量中迭代
这是我的问题。我希望迭代start和length变量指定的行,这两个变量都是整数值。但是,下面的代码给了我一个分段错误。如何指定要迭代的行 请注意:我只想要每一行的值。如果有更好的方法,请通知我C++ 在二维向量中迭代,c++,vector,C++,Vector,这是我的问题。我希望迭代start和length变量指定的行,这两个变量都是整数值。但是,下面的代码给了我一个分段错误。如何指定要迭代的行 请注意:我只想要每一行的值。如果有更好的方法,请通知我 vector<int>::iterator j; vector< vector<int> >::iterator i; vector< vector<int> > twoD; vector<double> A; for(i = (
vector<int>::iterator j;
vector< vector<int> >::iterator i;
vector< vector<int> > twoD;
vector<double> A;
for(i = (twoD.begin() + 1 + start); i != (twoD.begin() + start + 1 + length); i++)
for(j = (*i).begin(); j !=(*i).end(); j++)
printf(" %d \n", *j);
如果二维数组中的整数大于或等于双向量A的大小,则将尝试访问越界索引
换句话说,如果是这样的话:*j>=A.size,你将出界。在几个for循环之后,你的i将大于twoD。这意味着你将出界。 千万不要把这叫做:
i != (twoD.begin() + start + 1 + length)
相反,只需键入如下内容:
i != (twoD.end)
也不要使用i++。相反,只需使用++i。更安全一点。为什么要在开始和长度上加1?seg故障在哪里?你检查过*j的值了吗?所以在纸上把它写下来,找出你的出界点。很简单,[]中的行数正好等于twoD中的行数。从技术上讲,这不应该超出界限。而且,*j也不大于A中的行数。感谢您的回复,但我希望它仅从行开始到行开始+长度运行。我正在添加1,因为我不需要第0行的内容。因此,twoD.end不是一个选项。
i != (twoD.end)