Функция, удаляющая повторяющиеся элементы массива

Написал код, который удаляет повторяющиеся элементы массива (но удаляет их копии, то есть если в массиве встретить два элемента: 2 2, то одну двойку он должен удалить, а вторую оставить).

Как можно теперь записать данный алгоритм в виде отдельной функции по удалению повторяющихся элементов массива?

#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n;
    cout <<"n="; cin >>n;
 
    double*a = new double[n];
 
    for (int i = 0; i < n; i++)
      {
      a[i]=rand()%5 + 1;
      cout <<a[i]<<" ";
      }
    cout <<endl;
    
    for (int i = 0; i < n - 1; i++) 
    for (int j = i + 1; j < n; j++) 
    if (a[i]==a[j]) 
        { 
        for (int k = j; k < n; k++) 
        a[k]=a[k + 1]; 
        n--;
        j--;
        } 
    
    for (int i = 0; i < n; i++)
      cout <<a[i]<<" ";
      cout <<endl;
    delete[]a;
system("pause");
return 0;
}

Ответы (2 шт):

Автор решения: Andrianov Roma

Посоветовал бы воспользоваться std::vector и реализованными методами для решения этой задачи.

Но с вашим кодом функции будут выглядеть следующим образом:

template<typename T>
void resize(T* t,const int n)
{
    T* resize_arr = new T[n];
    for (int i = 0; i < n; i++)
        resize_arr[i] = t[i];
    t = resize_arr;
    delete[] resize_arr;
}

template<typename T>
int reduce_duplicates(T& t, const int n)
{
    int res = n;
    for (int i = 0; i < res - 1; i++)
    {
        for (int j = i + 1; j < res; j++)
        {
            if (t[i]==t[j])
            {
                for (int k = j; k < res; k++)
                {
                    t[k]=t[k + 1];
                    res--;
                    j--;
                    resize(&t, res);
                }
            }
        }
    }

    return res;
}
→ Ссылка
Автор решения: Harry

Поскольку о необходимости устойчивости ничего не сказано и раз у вас

double*a = new double[n];

(хотя сравнивать на равенство числа с плавающей точкой несколько, гм... опрометчиво)

то можно

sort(a,a+n);
n = unique(a,a+n) - a;

Все, у вас массив уникальных элементов из nштук...

См. https://ideone.com/P9f9fx

→ Ссылка