Учитывая, что ваш ввод в vector<int> foo
, вы можете использовать remove
, чтобы выполнить работу для вас здесь, тогда, если вы хотите уменьшить вектор, просто используйте erase
в противном случае просто используйте last
в качестве итератора «один за другим», если вы хотите удалить вектор с дубликатами, но сохранить порядок:
auto last = end(foo);
for(auto first = begin(foo); first < last; ++first) last = remove(next(first), last, *first);
foo.erase(last, end(foo));
Живой пример
Насколько сложность времени это будет O (нм) . Где n - количество элементов, а m - количество уникальных элементов. Что касается сложности пространства, для этого будет использоваться O (n) , поскольку оно выполняет удаление на месте.