C++ 递归函数调试asserion失败

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 <

我尝试使用递归函数输出int类型向量的所有参数,它可以工作,但出现调试断言失败。请帮我指出问题出在哪里。提前谢谢

#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