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