关于迭代器的问题,这段问题出在哪,运行输入两个数就崩了。开始出现很多0000.求解答。

#include
#include

using namespace std;

int main()
{
int val = 0,a = 0;
vector vInt;
cout << "请输入一组整数:";
while(cin >> val)
{
vInt.push_back(val);
}

if(vInt.cbegin() == vInt.cend())
    {
        cout << "没有任何元素!" << endl;
        return -1;
    }

for(auto it = vInt.cbegin(); it != vInt.cend() - 1; ++it)
{
    a = *it + *(++it);
    cout << a << " ";
    if((it - vInt.cbegin() + 1) % 10 == 0)
        cout << endl;
}

if(vInt.size() % 2 != 0)
{
    a = *(vInt.cend() - 1);
    cout << a;
}

return 0;

}

用的是code::blocker这个软件。

cend()后面为什么要去-1呢? 这个是迭代器,如果通过下表访问才是for(auto i = 0; i < vInt.size() -1; i++);

for(auto it = vInt.cbegin(); it != vInt.cend(); ++it)
{
a = *it + *(++it);
cout << a << " ";
if((it - vInt.cbegin() + 1) % 10 == 0)
cout << endl;
}

if(vInt.size() % 2 != 0)
{
a = *(vInt.cend());
cout << a;
}

上面的少了#include 和 #include ,没复制完全。这个代码我找的网上的c++ prime第五版的答案。用迭代器输出关于整数的相邻的和的答案。
在code::blocks上运行有问题。

我找到原因了。是 a = * it + (++it ); 这句代码的问题,因为这句自增可能会导致越界。改成(it + 1)就没问题了。*(++it) 很有可能造成访问越界。