Ciao, io ho risolto così:
#include <iostream>
using namespace std;
//Controlla se x è presente nel vettore, ritorna true in caso positivo false altrimenti
bool controllo(int A[],int n,int x);
//Trasferisce i valori da un vettore ad un altro
//Ritorna la dimensione del secondo vettore
int trasf(int A[],int B[],int n,int i,int j);
int main()
{
int i,n;
int dimB = 0;
cout<<" dimensione del vettore A e B >> ";
cin>>n
;
int A[n],B[dimB];
cout<<"elementi vettore A "<<endl;
for(i=0;i<n;i++)
cin>>A[i];
dimB=trasf(A,B,n,0,0);
cout<<"il vettore B "<<endl;
for(i=0;i<dimB;i++)
cout<<B[i]<<endl;
return 0;
}
bool controllo(int A[],int n,int x)
{
for(int i=0;i<n;i++) {
if (A[i]==x) return true;
}
return false;
}
int trasf(int A[],int B[],int n,int i,int j)
{
if (i >= n) return j;
else {
if(!controllo(B,j,A[i])) {
B[j]=A[i];
j++;
}
i++;
trasf(A,B,n,i,j);
}
}
Può andare?
Ricordati di fare attenzione con le dimensioni dei vettori:
for(i=0;i<n;i++)
{
if(A[i]==A[i+1])
...
}
Le celle di un vettore di n dimensioni vanno da 0 a n-1; con questo codice se per esempio n=5 ed il tuo indice i è pari a 4 quando tenti di accedere alla posizione A[i+1] stai cercando di accedere ad una cella che non esiste nel vettore (in questo caso A[5]).
for(i=0;i<n;i++)
cout<<B[i]<<endl;
Qua di nuovo: il secondo vettore (B) conterrà solo i numeri che non si ripetono del primo vettore (A) e di conseguenza avrà dimensione uguale a n solamente se il primo vettore non contiene valori uguali, altrimenti avrà per certo una dimensione minore; se, come in questo caso, scorri un vettore da 0 a n ma n è più grande della dimensione effettiva del vettore accederai a celle di memoria che non fanno parte del vettore e che contengono numeri casuali (ecco perché può capitarti di vedere in output valori enormi tipo 31526 o -21536).
Maggiori info
Index out of bounds[en]