Я немного запутался в итераторах. Я хотел бы удалить член вектора, который имеет определенное значение, даже если это единственный элемент в векторе.
У меня есть вектор класса. Я хотел бы, чтобы одна из переменных члена класса, например width
, имела определенное значение, этот экземпляр класса будет окончательно удален из вектора. Давайте предположим, что класс состоит только из конструктора, принимая width
и height
, как открытые переменные, так и деструктор в качестве своих открытых функций.
vector<Rectangle> vect1;
Rectangle memVar1(3, 5);
Rectangle memVar2(6, 10);
vect1.push_back(memVar1);
vect1.push_back(memVar2);
Таким образом, он будет перебирать все элементы вектора, ища, если высота равна 5.
for(std::vector<myClass>::iterator it = vect1.begin(); it != vect1.end(); ++it) {
if (it->height == 5) {
//delete the element from the vector, and so memVar2 will be the only element and it will be in slot 0 of the vector now.
it = vect1.erase(it);
}
}
И это работает, как и ожидалось, проблема возникает, если в векторе есть только один элемент, который имеет нежелательную высоту 5. Я хотел бы удалить элемент из вектора, но затем также безопасно выйти из итерации. , В приведенном выше примере я мог бы вставить break
после установки его в vect1.erase (it), но это не сработало бы, если бы мое стирание было, например, внутри переключателя внутри цикла итерации, и поэтому мне понадобилось бы условная переменная для выхода оттуда, когда она покидает оператор switch.
Так что мне было интересно, есть ли способ сделать это, который не требует от меня использования break
, чтобы избежать появления кода беспорядка, если я стираю внутри оператора switch?