как правильно удалять произвольные элементы из вектора
для встроенных
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v{1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 9, 0};
v.erase(remove(v.begin(), v.end(), 0), v.end());
// или
// auto it = stable_partition(v.begin(), v.end(), [](int n){ return n != 0;}); // or partition
// v.erase(it, v.end());
for(int i : v)
{
cout << i << " ";
}
}
или никак и надо использовать другой контейнер?
Не то что никак, вставка и удаление элементов в векторе везде кроме конца - просто неэффективна.
Если
не нужен быстрый произвольный доступ можно использовать
std::list или даже
std::forward_list
или даже
std::unordered_multiset