迭代2维向量

时间:2014-12-09 21:11:40

标签: c++ vector

这是我的问题。我希望迭代由start和length变量指定的行(两个都是整数值)。但是,以下代码给出了分段错误。如何指定我希望迭代的行?

(请注意:我只想要每行的值(注意* j正被访问)如果有更好的方法,请告诉我..)

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);

相同的代码,没有指定开始和结束行(for循环中的start和start + length参数)编译并按预期运行。

for(i = (twoD.begin() + 1); i != twoD.end(); i++)
    for(j = (*i).begin(); j !=(*i).end(); j++)
        printf(" %d  \n", *j);

2 个答案:

答案 0 :(得分:0)

如果二维数组中的整数大于或等于双向量A的大小,则会尝试访问越界索引。

换句话说,如果情况如此:*j >= A.size(),你就会超出界限。

答案 1 :(得分:0)

经过一些for循环后,你的“i”将大于2D。这意味着你将超出界限。 永远不要这样说:

i != (twoD.begin() + start + 1 + length)

而不是像这样输入:

i != (twoD.end)

也不要使用i ++。而只是使用++ i。这有点安全。