用迭代遍历vector,请问代码哪里写错了

菜鸡的逆袭之路 2016-11-20 04:52:43
void display(vector<int>::iterator it1, vector<int>::iterator it2)
{
if (it1 != it2) {
cout << *it1<<endl;
display(it1++, it2);
}
}

int main()
{
vector<int> li{ 1,2,3,4,5,6,7,8,9,10 };
display(li.begin(), li.end());
system("pause");

}
用vs编译器,自动设置了断点并抛出异常,请问如何修改代码?
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ck2333 2016-11-22
  • 打赏
  • 举报
回复
给楼主纠正一下。end()那个我看错了,你这里写的没问题。。主要的问题就是形参++的问题。
ck2333 2016-11-21
  • 打赏
  • 举报
回复
end()指向最后一个元素的下一个位置的,并不是楼主想的最后一个元素,所以你这里很明显就溢出了。还有一个问题就是你的自增有问题,这里很明显要先增,这种小问题楼主得多注意下。
小灸舞 2016-11-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 版主 2016-11-20
  • 打赏
  • 举报
回复
void display(vector<int>::iterator it1, vector<int>::iterator it2)
{
if (it1 != it2) {
cout << *it1 << endl;
display(++it1, it2);
}
}

int main()
{
vector<int> li{ 1,2,3,4,5,6,7,8,9,10 };
auto a = li.begin()._Ptr;
display(li.begin(), li.end());
system("pause");
}

你次传入的参数都是一样的,所以递归一直继承,直到栈溢出
flying_music 2016-11-20
  • 打赏
  • 举报
回复
	display(++it1, it2);

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧