Kezdőoldal » Számítástechnika » Programozás » C++-ban hogyan állapítom meg...

C++-ban hogyan állapítom meg egy tömbre mutató pointerrel, hogy a tömb adott eleme NULL-e?

Figyelt kérdés

Van egy tömböm:


SajatOsztaly tomb* = new SajatOsztaly[100];


Ebbe rakosgatok bele SajatOsztaly objektumokat, de néha ki is törlök. Ezért nem elég, ha számontartom, hanyadik indexbe tettem utoljára, mert régiek is kiürülhetnek. Ennek a tömbnek egy elemére úgy hivatkozok, hogy *(tomb+i), ezt értem. De honnan tudom, hogy ez a *(tomb+i) egy már megadott objektumra mutat, vagy csak egy lefoglalt memóriaterületre? Nem tudom, hogy NULL-nak hívhatom-e, de a NULL-t így értettem a kérdésben.



2012. dec. 11. 22:45
 1/4 anonim ***** válasza:
if (tomb[i]==NULL) {cout<<"null érték";}
2012. dec. 12. 01:21
Hasznos számodra ez a válasz?
 2/4 iostream ***** válasza:

Amikor felszabadítod, nullázd ki:

delete tomb[i];

tomb[i] = 0; //vagy tomb[i] = nullptr; ha újabb fordítód van


De ez alapvetően arra utal, hogy valami tervezési problémád is van, ez nem egy jó dizájn. Gondolkozz el, nem-e érdemesebb map/set-et használni, vagy valami egyéb, tömbnél összetettebb adatszerkezetet.

2012. dec. 12. 10:37
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:

Nagy adatsor esetén semmiképp nem érdemes ezt a megoldást használnod. Egyébként megteheted az, hogy számon tartod, hány eleme van a tömbnek, aztán törléskor a törlendő elemet felcseréled az utolsó elemmel (swap parancs). Ez elég gyors tud lenni, ha az objektumodban csak néhány int vagy pointer van, tehát nem kilobájtnyi adatok. Ha esetleg nagyobbak, akkor mutatókból álló tömböt csinálj, és a mutatókat cserélgesd, de vedd figyelembe hogy ez a sebesség rovására mehet ha tényleg valami villámgyors programot akarsz. (Például valamit, ami matematikai számításokat végez) Aztán az utolsó elemet ki is nullázhatod, de nem fontos, elég, ha a tömb hosszát csökkented eggyel. Ha úgy csinálod meg a program többi részét, hogy figyelembe veszi, hogy a tömb hosszán túl lévő elemeket (Amik persze szintén lefoglalt memóriaterületek, és nem null vagy nullptr értékűek!) ki kell hagyni a számításból.


De ha a teljes tömböd nagy méretű, akkor inkább a vector használatát javaslom.

2012. dec. 28. 10:43
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:
Ja és egyébként a sebesség rovására azért megy, mert ha mutatóból álló tömböt használsz, akkor a fordító nem tudja úgy intézni, hogy a számításhoz szükséges adatok regiszterben illetve cache-ben maradjanak, ráadásul kapsz néhány plusz műveletet. Viszont a tömbbel végzett műveletetek ezáltal felgyorsulnak, és ha nagy méretű adatok vannak a tömbben, illetve ha nem kell sok számítást végezni az elemekkel, akkor a mutató-mágiát érdemes inkább használni :)
2012. dec. 28. 10:52
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!