如何使用迭代器作为参数方法?

时间:2018-05-21 17:42:30

标签: c++ c++11 iterator

我遇到这种情况:

 void methodB(list<int>::iterator myIt){
    myIt++;
}
void methodA(){
    list<int> * myList=new list<int>();
    list<int>::iterator it=myList->begin();
    //many insertion in myList ...
    methodB(it);
    //...
}

我想要的是,当methodB结束时,迭代器是一个向前的位置但是我不能这样做...如果我在methodA()中并且多次调用methodB(它),每次复制迭代器当控件返回到methodA()时,变量在myList-&gt; begin()中始终。 我怎么解决这个问题? 感谢

2 个答案:

答案 0 :(得分:2)

您需要通过引用传递它,例如:

void methodB(list<int>::iterator& myIt);

答案 1 :(得分:2)

一个好的模型是std::next,它返回迭代器的修改后的副本:

list<int>::iterator
methodB(list<int>::iterator myIt){
    myIt++;
    return myIt;
}

void methodA(){
    list<int> * myList=new list<int>();
    list<int>::iterator it=myList->begin();
    //many insertion in myList ...
    it = methodB(it);
    //...
}

https://en.cppreference.com/w/cpp/iterator/next

请注意,容器迭代器的设计价格便宜。