Я хочу обработать каждый узел в контейнере
vector<int>
.STL Как сохранить итератор после удаления()Пусть
vector<int>
содержит 0, 1, 2, и 3, и итератор указывает на 2.Я хочу стереть 2 без потери информации о позиции итератора, так как я хочу, чтобы обрабатывать «3 "после стирания 2.
Вот что я сделал, но результат не показывает, что я намеревался.
Вот мои вопросы:
Q1) Когда vector<int>::iterator oldIter = iter;
выполняется, ли oldIter
создать новый объект итератора?
Q2) Почему значение итератора остается неизменным после его увеличения?
Q3) Что такое хороший способ стереть узел без потери местоположения итератора?
Q4) Наконец, тривиальный вопрос. Я пробовал cout << iter;
, но он не работает. Почему это?
Вот код:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> vContainer;
vector<int>::iterator iter;
vContainer.push_back(0);
vContainer.push_back(1);
vContainer.push_back(2);
vContainer.push_back(3);
for(int i = 0; i < vContainer.size(); i++){
cout << vContainer[i] << endl;
}
printf("iter: %x\n", iter);
iter = vContainer.begin();
// Move the itertor to the 2.
while(*iter != 2){
iter++;
}
printf("iter: %x\n", iter);
vector<int>::iterator oldIter = iter;
printf("\nBefore erase(oldIter)\n");
printf("oldIter: %x\n", oldIter);
printf("iter: %x\n", iter);
iter++;
printf("\nAfter incrementing iter\n");
printf("oldIter: %x\n", oldIter);
printf("iter: %x\n", iter);
vContainer.erase(oldIter);
printf("\nAfter erase(oldIter)\n");
printf("oldIter: %x\n", oldIter);
printf("iter: %x\n", iter);
for(int i = 0; i < vContainer.size(); i++){
cout << vContainer[i] << endl;
}
}
Благодарим вас за повтор. Что касается вопроса (3), где указывает возвращаемое значение? Раньше он указывал на «2», но теперь он ушел. –
@PeterHwang: Он укажет на элемент, который перемещается в стертое положение. 3 в вашем случае. Если вы удалите последний элемент, он вернет итератор, который будет возвращен вызовом 'end()'. –
Если я это правильно понимаю, удалите узел, который указан итератором, и переместите все остальные узлы на единицу. Верный? –