Как удалить элемент в векторе <type>через ссылку на цикл - PullRequest
0 голосов
/ 02 июля 2019

Здравствуйте, я довольно новичок в C ++ и очень много в ссылках и указателях, и пытаюсь удалить элементы в следующем цикле for:

for(type &i : vectorName)
{
    if(condition)
    {
        //delete i
    }
}

Как мне это сделать, но при этом убедиться, что нет нулязначения созданы?

1 Ответ

2 голосов
/ 02 июля 2019

Не делай этого. Используйте хороший встроенный std::remove_if.

vectorName.erase(std::remove_if(vectorName.begin(), vectorName.end(), [](const auto& i){return condition;}), 
                 vectorName.end());

erase имеет решающее значение, потому что remove_if не меняет размер контейнера. Он просто возвращает новый конец (так что он может работать с любым диапазоном, а не только с целыми контейнерами). Это называется стирание-удаление идиома .


Ваш подход гораздо сложнее использовать, потому что удаление элемента из вектора делает недействительными все итераторы . Это означает, что после удаления одного элемента вы не сможете продолжать в том же цикле на основе диапазона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...