关于c++:c-primer-练习633递归函数使用迭代器踩坑记录

练习6.33:编写一个递归函数,输入vector对象的内容

问题复现

如题,笔者在实现练习6.33时,依据题意写出的代码如下

void myPrint(vector<int> v,vector<int>::iterator it) {
    if (it != v.end()) {
        cout << *it;
        myPrint(v, it++);    
    }
}

int main() {
    vector<int> v = { 1,2,3,4 };
    myPrint(v,v.begin());

    return 0;
}

试图在递归中应用迭代器,一运行发现报错,报错提醒:vector的迭代器不兼容


起因:

后百度查阅知,myVector传入的是一般形参,运行时会先将实参v拷贝一份,拷贝之后的不是原来的v的迭代器了,这时再与原来的v.end()作比拟就提醒迭代器不兼容了


解决办法:

将形参v改为援用,这时迭代器就都是同一个v下的,不呈现不兼容景象

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理