Отсортировать вектор и убрать повторы элементов
Требуется убрать из вектора повторные элементы и отсортировать его, пользуясь не нативными средствами, а алгоритмами 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.
28.05.2019, 22:47 [1820 просмотров]