Különböző elemek kiválasztása egy tömbből egy másik tömbbe C++-ban?
Valaki tudja mi a gond a következő függvennyel?
void kulonbozo_elemek_kivalogatasa(int x[], int N)
{
int kulonbozo = 1;
int k[N];
for (int i = 1; i <N; i++) {
int j = 0;
for (j = 0; j < i; j++)
if (x[i] == x[j])
{
break;
}
if (i == j)
{
k[kulonbozo]=x[i];
kulonbozo++;
}
}
cout<<kulonbozo<<" ";
for(int i=1; i<kulonbozo; i++)
{
cout<<k[i]<<" ";
}
}
Laikusként nem érzem magamat hivatva az algoritmus szépségének elbírálására, de úgy látom, alapvetően működik. Igaz, nem adsz értéket k[0]-nak, így ott akármilyen szám lehet, ezen azonban szellemesen segítesz a kiíratásnál: Eleve a második elemtől (k[1]) indítod a ciklust, így a memóriaszemét nem fájdítja a fejedet. Kétségtelen, hogy a ciklus emiatt eggyel kevesebb számot írna ki a kelleténél, viszont ezt orvoslod azzal, hogy a hiányzó k[0] helyett ugyanannak a sornak az elejére beszúrod helyette a különböző elemek számát...
A fentiek értelmében javaslom, hogy k[0] inkább kapja meg x[0] értékét, a végén pedig 0-tól indexelve írasd ki az egész k[] tömböt. Ha az elemek számát is muszáj kiíratni, akkor azt külön sorban, esetleg útba igazító megjegyzés kíséretében tedd, hogy még véletlenül se higgye valaki, hogy az is a tömb eleme. Mindettől eltekintve én is ajánlom az alapos revíziót.
Mellesleg, a magam részéről nem bántam volna, ha azt a háromsoros maint is beleírod a kódba, ami az egészet nyomban kipróbálhatóvá is teszi, de ez a kis pluszmunka még nekem sem okozott gondot, a hozzáértő kollégák pedig talán meg is orroltak volna miatta, hogy még ennyit sem nézel ki belőlük...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!