Не работает функция unique для vector

339
19 декабря 2016, 20:08

почему не удаляются дубликаты из вектора?

#include <vector>
#include <iostream> 
#include <algorithm>
#include <time.h>
using namespace std;
 void printVector(vector<int> & v);
int main() {
    vector<int> v;
    srand(time(0));
    for (int i = 0; i < 10; i++){
        v.push_back(rand() % 9);
    }
    printVector(v);
    sort(v.begin(), v.end());
    cout << endl;
    printVector(v);
    unique(v.begin(), v.end()); // не работает
    cout << endl;
    printVector(v);
    return 0;
}
void printVector(vector<int> & v){
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++){
         cout << *it << endl;
    }
}
Answer 1

Делайте так:

v.erase(
    unique(v.begin(), v.end()),
    v.end());

Дело в том, что std::unique лишь сдвигает дублирующиеся элементы в конец вектора, но не удаляет их оттуда. (Он также возвращает итератор, указывающий на первый из "ненужных" элементов.)

READ ALSO
Перекрытие методов в классе

Перекрытие методов в классе

Почему void f(long) перекрыл void f(int)? Я думал, что прототип функции производного класса должен полностью соответствовать прототипу функции базового,...

323
Область применения Си и Си++

Область применения Си и Си++

Хотелось бы узнать каковы области применения языков Си и Си++ и для каких платформ чаще их используют?

348
Скачивание файла с FTP сервера

Скачивание файла с FTP сервера

Добрый вечер! Помогите понять почему не скачивается файл с FTP сервера

432
Запись в файл на С++ результатов запроса к postgres базе

Запись в файл на С++ результатов запроса к postgres базе

Производится чтение из базы даннных слов и имен файлов (которые содержат эти слова) и запись их в текстовый файл в следующем формате: файл...

338