C++ 递归函数调试asserion失败
我尝试使用递归函数输出int类型向量的所有参数,它可以工作,但出现调试断言失败。请帮我指出问题出在哪里。提前谢谢C++ 递归函数调试asserion失败,c++,recursion,C++,Recursion,我尝试使用递归函数输出int类型向量的所有参数,它可以工作,但出现调试断言失败。请帮我指出问题出在哪里。提前谢谢 #include<iostream> #include<vector> using namespace std; void val(vector<int>::const_iterator beg, vector<int>::const_iterator end) { if (beg!=end) cout <
#include<iostream>
#include<vector>
using namespace std;
void val(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
if (beg!=end)
cout << *beg << endl;
val((beg + 1),end);
}
int main()
{
int n;
vector<int> vec;
while (cin >> n)
vec.push_back(n);
val(vec.begin(),vec.end());
}
#包括
#包括
使用名称空间std;
void val(向量::常量迭代器beg,向量::常量迭代器end)
{
如果(beg!=结束)
cout n)
向量推回(n);
val(vec.begin(),vec.end());
}
几乎正确,但到达向量末尾后不要递归调用自己
void val(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
if (beg!=end)
{
cout << *beg << endl;
val((beg + 1),end);
}
}
void val(向量::常量迭代器beg,向量::常量迭代器end)
{
如果(beg!=结束)
{
cout您没有提供递归应该停止的位置。您可以使用下面的内容
void val(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
if(beg == end) return;
cout << *beg << endl;
val(beg + 1,end);
}
void val(向量::常量迭代器beg,向量::常量迭代器end)
{
如果(beg==结束)返回;
这个问题是否应该通过迭代来解决。递归很少是正确的答案,而且它通常会使事情变得更复杂,正如这个问题所表明的那样。beg+1
是可以的,如果你假设你正在处理一个随机访问迭代器。一个更好的解决方案将使用std::next(beg)
,无论迭代器类别如何,它都可以工作。或者更简单的是,++beg
。