这个矢量编码有什么问题?(初学者)

时间:2016-03-26 02:58:10

标签: c++ vector

我想做一个循环来显示从第一个和第二个,第二个和下一个,第三个和下一个到最后一个的向量中的元素。然而,当我运行这个错误弹出说矢量下标超出范围...任何建议请 我是初学者。

for (int i = 0; i < vecB.size(); i++)
{
    cout << vecB[i]; cout << " "; cout << vecB[i + 1];
}

3 个答案:

答案 0 :(得分:5)

如果vecB.size()是例如5,那么在循环的最后一次迭代中,i将是4.这将是i的最后一个值,在最后一次迭代中你的for循环。现在采取这个循环的主体:

cout << vecB[i]; cout << " "; cout << vecB[i + 1];

并尝试弄清楚,使用铅笔纸,这里的任何矢量参考是否超出范围。请注意,vecB包含五个元素,vecB[0]vecB[4]。而且,正如我所解释的那样,i将是4。

时钟开始滴答...... 现在

答案 1 :(得分:1)

在循环的最后一次迭代中,显示最后一个项目和后面的项目,因此不存在错误

答案 2 :(得分:0)

让我们想象一下vecB.size() == 3

让我们来看看循环:

for (int i = 0; i != vecB.size(); ++i)
    cout << vecB.at(i) << " " << vecB.at(i + 1);
    //              0                      1

for (int i = 0; i != vecB.size(); ++i)
    cout << vecB.at(i) << " " << vecB.at(i + 1);
    //              1                      2

for (int i = 0; i != vecB.size(); ++i)
    cout << vecB.at(i) << " " << vecB.at(i + 1);
    //              2                      3! out of range!

您可以通过选中i != vecB.size() - 1

来解决此问题
for (int i = 0; i != v.size() - 1; ++i)
    cout << v.at(i) << " " << v.at(i + 1) << '\n';