Удаление элемента из вектора при сохранении порядка - нужен лучший подход
Я пытаюсь удалить элемент из вектора в C++. В приведенном ниже коде я удаляю элемент, который больше 10, из списка чисел в векторе. Я использую вложенный цикл для удаления. Есть ли лучший или простой способ сделать то же самое.
// removing an element from vector preserving order
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v {3,2,9,82,2,5,4,3,4,6};
for (int i=0; i < v.size(); i++) {
if (v[i] > 10) { // remove element > 10
while (i < v.size()) {
v[i] = v[i+1];
i ++;
}
}
}
v.pop_back();
for (int i=0; i < v.size(); i++) {
cout << v[i] << "|";
}
return 0;
}
1 ответ
Решение
Возможно, вы захотите взглянуть на std::remove_if
bool is_higher_than_10(int i) { return i > 10; }
std::remove_if(v.begin(), v.end(), is_higher_than_10);
А так как всегда есть чему поучиться, взгляните на комментарии Криса и Бенджамина Линдли и идиому удаления-удаления (спасибо, ребята)
v.erase(std::remove_if(v.begin(), v.end(), is_higher_than_10), v.end());