C++ Template, tömb és pointer probléma?
Nos adott az alábbi feladat:
data.hu/get/11879699/kod.txt
És a hozzá írt header fájlom:
data.hu/get/11879700/header.txt
A probléma a következő lenne:
A feladat azt kéri, hogy töröljem egy generikus osztály konstruktorában megadott paraméter minden előfordulását az eredeti tömb-ből. De tudtommal ez c++-ban nem lehetséges, mert az inicializálásnál lefoglalt memóriaterületet már nem módosíthatom(tehát a méretét). Ezt megpróbáltam pointerekkel orvosolni, de így is csak az elemek sorrendjét tudom variálni, ami az egyik részfeltételnél szintén nem jó megoldás. Ezt hogyan lehetne helyesen megoldani? Előre is köszönöm a segítséget!
A kódot nem néztem (valami forráskódmegosztó oldalt használj pls!) de a feladatleírásod alapján itt egy megoldás:
Megszámolod a megadott elem előfordulását a tömbben majd létrehozol egy új megfelelő méretű tömböt és minden elemet átmásolsz. Ezután átállítod a mutatót az új tömbre.
Oh, egy CPP vizsga :D
Ahogy nézem, nem az eredeti tömbből (ami a main-en belül van deklarálva) kell törölnöd, hanem az array_eraser objektumodban tárolt tömbből, ahogy nézem, a feladat kifejezetten azt akarja, hogy az eredeti tömb ne változzon. Innentől tehát a konstruktorban csak lemásolod az eredeti tömböt, és onnantól azzal azt csinálsz amit akarsz. Ha törölni akarsz belőle, azt jellemzően úgy tudod megcsinálni, hogy lefoglalsz egy új tömböt az új mérettel, abba átpakolod a még meglevő elemeket, és beállítod annak a pointerét az objektumodban (az előzőt ne felejtsd el felszabadítani delete-el). Alternatíva, hogy a törölt elemeket hátrarendezed a tömb végére, és a sizem értékét átállítod ennek megfelelően. Ezzel megspórolod az új tömb lefoglalását, cserébe kell néhány swap műveletet végezni.
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!