Как использовать итератор в качестве метода параметров? - PullRequest
0 голосов
/ 21 мая 2018

У меня такая ситуация:

 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 (it), каждый раз, когда итератор копируется, и когда элемент управления возвращается к methodA (), переменная it равна всегда в myList-> begin ().Как я могу решить эту проблему?Спасибо

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Хорошая модель для этого - 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

Обратите внимание, что контейнерные итераторы разработаны так, чтобы дешевокопия.

0 голосов
/ 21 мая 2018

Вам нужно передать его по ссылке, например:

void methodB(list<int>::iterator& myIt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...