Вам может понадобиться что-то вроде этого
vector<int> vec{1,1,2,3,4,4,2,5,6};
sort(begin(vec), end(vec));
auto last = unique(begin(vec), end(vec));
vec.erase(last, end(vec));
, чтобы заставить std :: unique работать, диапазон должен быть предварительно отсортированРЕДАКТИРОВАТЬ: я вижу, что я не сделал то, что требовал вопрос, потому что я искал другой ответ.Мне удалось написать функцию, которая возвращает вектор с уникальными числами, но он выделяет временный счетный массив и в итоге копирует элементы из вектора, которые были уникальными.Любые комментарии по этому поводу приветствуются.
template<typename T>
std::vector<T> erase_duplicated(const std::vector<T>& vec)
{
const size_t n = vec.size();
int* duplicates = new int[n];
for(size_t i = 0; i < n; ++i) duplicates[i] = 0;
for(size_t i = 0; i < n; ++i)
{
for(size_t j = i + 1; j < n; ++j)
if(vec[i] == vec[j])
{
++duplicates[i];
++duplicates[j];
}
}
std::vector<T> temp;
for(size_t i = 0; i < n; ++i)
{
if(!duplicates[i])
temp.push_back(vec[i]);
}
delete [] duplicates;
return temp;
}