Как правильно удалить определенные элементы блока с указателями?
auto end=pointer; while(beginning!=end){ duplicate=0; next=beginning+1; while(next!=end){ if(function(*next)==function(*beginning)){ duplicate++; } next++; } if(duplicate>0) end=std::remove(beginning,end,function(*next)); beginning++; }
Что я уже пробовал:
Этот фрагмент кода является частью функции, которая выглядит примерно так:
авто DeleteEvery(TipElemenata начала,TipElemenata &амп;указатель)-&ГТ;имя_типа с std::remove_reference&ЛТ;decltype(*начало)&ГТ;::тип*
начало-это указатель на первый элемент блока(вектор, массив или что-то в этом роде)
end - это указатель, который указывает сразу после последнего элемента блока
Итак, я должен удалить все элементы, для которых функция возвращает одно и то же значение. Теперь я знаю, что функция "удалить" из алгоритма библиотеки на самом деле не удаляет элементы, а перемещает их. Вот почему я использую указатель, который возвращает "удалить", чтобы указать новый конец блока. Но кажется, что он пропускает некоторые элементы. Что я делаю не так?
0x01AA
Почему, черт возьми, вы ожидаете "следующего" после того, как внутреннее время все еще действует?
kohi11
Да, извините, я должен был написать функцию remove для удаления *end во внутреннем цикле while и добавить функцию remove для удаления *beginning после условия if(duplicate>0). Но он все равно пропускает элементы.