我遇到这种情况:
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()中始终。 我怎么解决这个问题? 感谢
答案 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
请注意,容器迭代器的设计价格便宜。