Эта демонстративная программа успешно компилируется и дает ожидаемый результат
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
Выход
1 2 5 6
Я подозреваю, что вы передаете вектор в функцию по значению, а не по ссылке. Таким образом, вы меняете копию исходного вектора. Например
#include <iostream>
#include <vector>
#include <algorithm>
void remove_duplicates(std::vector<int> gid)
{
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
}
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
remove_duplicates(gid);
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
Выход будет
1 1 2 2 5 5 6 6
Но если вы измените объявление параметра как
#include <iostream>
#include <vector>
#include <algorithm>
void remove_duplicates(std::vector<int> &gid)
{
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
}
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
remove_duplicates(gid);
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
, то результат будет, как ожидается,
1 2 5 6
Другая причина n, если вектор является членом данных класса, и вместо использования этого элемента данных вы используете локальное определение вектора в некоторой функции-члене. Это общая ошибка начинающих.
Итак, вам нужно проверить, действительно ли вы имеете дело с исходным вектором в каждой из операций.
Запуск как ожидается [здесь] (https://ideone.com/VghsbZ). – Jarod42
Скорее всего, ваш код, чтобы проверить, что находится в векторе впоследствии, неверен. –
Если вы не предоставите код, который воспроизводит поведение, которое вы наблюдаете, мы не сможем вам помочь. Код кажется правильным. –