БлогNot. Отсортировать вектор и убрать повторы элементов

Отсортировать вектор и убрать повторы элементов

Требуется убрать из вектора повторные элементы и отсортировать его, пользуясь не нативными средствами, а алгоритмами STL.

Реальная вычислительная трудоёмкость такого подхода всё равно довольно высока, но для небольших размерностей данных и уровня квалификации современных программистов "пойдёт" вполне :)

Без сортировки unique и unique_copy просто удалят подряд идущие одинаковые элементы, что тоже бывает полезно.

// Отсортировать вектор и убрать повторы элементов
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
 int myints[] = { 10,20,20,30,20,20,30,40,10 };
 int n = sizeof(myints) / sizeof(myints[0]);
 vector <int> myvector(myints, myints + n);

 sort (myvector.begin(), myvector.end());
 vector <int>::iterator it;
 it = unique(myvector.begin(), myvector.end());
 myvector.resize(distance(myvector.begin(), it));

 for (it = myvector.begin(); it != myvector.end(); ++it)
  cout << ' ' << *it;
 cin.get(); return 0;
}
//То же через unique_copy
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
 int myints[] = { 10,20,20,30,20,20,30,40,10 };
 int n = sizeof(myints) / sizeof(myints[0]);
 vector <int> myvector (myints, myints + n);

 sort(myvector.begin(), myvector.end());
 vector <int>::iterator it;
 it = unique_copy (myvector.begin(), myvector.end(), myvector.begin());
 myvector.resize(distance(myvector.begin(), it));
 
 for (it = myvector.begin(); it != myvector.end(); ++it)
  cout << ' ' << *it;
 cin.get(); return 0;
}

Проверено в консолях Visual Studio 2015 и QT 5.X.


теги: c++ алгоритм учебное

28.05.2019, 22:47; рейтинг: 319