遍历二维向量

Iterating through 2 Dimensional Vectors

本文关键字:二维 向量 遍历      更新时间:2023-10-16

这是我的问题。我希望遍历由开始和长度变量(都是整数值)指定的行。但是,以下代码给了我一个分段错误。如何指定要循环访问的行?

请注意:我只想要每一行的值(注意 *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 循环中的开始和开始+长度参数)按预期编译和运行。

for(i = (twoD.begin() + 1); i != twoD.end(); 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。这样更安全一点。