У меня возникла проблема, когда я хотел пройти через свой вектор и удалить элементы, которые больше не нужны. Причина того, почему это провалилось, очевидно, но я не видел этого, когда я пробовал свой наивный подход. В принципе, итератор становится недействительным, когда я стираю элемент, и цикл не может продолжаться. То, что я сделал следующий:Каков правильный способ итерации вектора и удаления определенных элементов
#define GOOD 1
#define BAD 0
struct Element
{
Element(int isGood) : good(isGood){}
bool good;
};
int main()
{
std::vector<Element> arr;
arr.push_back(Element(BAD));
arr.push_back(Element(GOOD));
arr.push_back(Element(BAD));
arr.push_back(Element(GOOD));
//__CLEAN ARRAY__//
for (auto it = arr.begin(); it != arr.end(); ++it)
{
if ((*it).good == false) arr.erase(it);
}
}
Так что очевидно, что это не будет работать, мне было интересно, что правильный/лучший способ сделать это. Следующим шагом будет перезапуск цикла со свежими итераторами, если не будет найдено ничего хорошего, но это тоже кажется пустой тратой. В идеале цикл продолжится там, где он остановился на свежих итераторах?
Спасибо.
Подробнее о 'std :: remove_if'. –