c++ primer vector 习题3.24报错

3.24 题目:读入一组整数并把他们存入一个vector对象,用迭代器 将每对相邻整数的和输出出来

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vInt;
    int iVal;
    cout << "请输入一组数字:" << endl;
    while (cin >> iVal)
        vInt.push_back(iVal);
    if (vInt.cbegin() == vInt.cend())
    {
        cout << "没有任何元素" << endl;
        return -1;
    }
    cout << "相邻两项的和依次是:" << endl;
    // 利用auto推断it的类型
    for (auto it = vInt.cbegin(); it != vInt.cend() - 1; it++)
    {
        // 求相邻两项的和
        cout << (*it + *(++it)) << " ";
        // 每行输出5个数字
        if ((it - vInt.cbegin() + 1) % 10 == 0)
            cout << endl;
    }
    // 如果元素数是奇数,单独处理最后一个元素
    if (vInt.size() % 2 != 0)
        cout << *(vInt.cend() - 1);
    system("pause");
    return 0;
}

当输入元素个数为偶数时,出现如下错误:

程序可以正常输出但是报错can't dereference out of range vector iterator

当把 18行 it !=vInt.cend()-1 改为 it<vInt.cend()-1 后,不论输入 奇数偶数个元素,都可以正常输出并且不报错

导致越界

建议用线性表的数组写法 vInt[0]

建议先从数组开始,然后再接触指针。

写一份数组的遍历,如果数组遍历不报内存泄漏,那再改成指针的,自己摸摸嘛

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

也许对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html