Я хочу очистити елемент від вектора за допомогою методу стирання. Але проблема тут полягає в тому, що елемент не гарантовано виникає лише один раз у векторі. Він може бути присутнім кілька разів, і мені потрібно очистити їх усі. Мій код приблизно такий:
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
Цей код, очевидно, виходить з ладу, тому що я змінюю кінець вектора під час ітерації через нього. Який найкращий спосіб досягти цього? Тобто чи є спосіб зробити це без повторення вектора кілька разів або створення ще однієї копії вектора?
std::remove()
зміщує елементи таким чином, що елементи для видалення перезаписуються. Алгоритм не змінює розмір контейнера, і якщоn
елементи вилучені, то не визначено, які є останніn
елементи.