Elemente im Array löschen?
-
Hallo!
Wie kann ich ein Element in einem Array explizit löschen? Bei einem Zeigerfeld kann ich ja einfach den NULL-Zeiger in das Feld schreiben, aber wie mache ich das bei einem anderen (u.U. selbst definierten) Typ?
Basti
-
vc.erase(vc.begin(), vc.begin()+pos);
vc= vector
pos= zahl ab der gelöscht werden soll
-
vc.erase(vc.begin(), vc.begin()+pos);
vc= vector
pos= zahl ab der gelöscht werden sollNö, entweder um ein Element zu löschen:
vc.erase(vc.begin()+pos);
oder einen Bereich
vc.erase(vc.begin()+start, vc.begin()+end);
wobei start und end die Positionen der äußeren Objekte darstellen.
Mfg, smasher1985
-
int array[5]={1,2,3,4,5}; int pos = 2; delete &array[pos];
-
evilknivel schrieb:
int array[5]={1,2,3,4,5}; int pos = 2; delete &array[pos];
boah bist du evil
lass das ma, sonst gucken die noobs sich das falsch ab.
-
frank-y schrieb:
vc= vector
Meint ihr damit den Feldnamen (die adresse des ersten Elements)?
z.B.:
int feld[10];
feld[3] = 99;
feld.erase(feld.begin() + 3);Muss ich dafür ein spezielle Bibliothek o.ä. includieren?
Basti
-
nanana, wir sind hier im c++-forum und da soll man doch schön brav den vector instead of "normale arrays" benutzen, wenn man solche spässe wie löschen, dynamische größenanpassung, hinzufügen etc. einfach haben möchte.
also kommt vorne ins file ein:#include <vector> using namespace std;
und dann kanns auch schon losgehen. wenn du jetzt ein int-array haben magst, nimmst' denn vector (der eine template-class ist) und übergibst ihm als typ int...so in etwa:
vector<int> feld;
"feld" ist jetzt dein arraybezeichner und damit kannst du jetzt die o.g. funktionen durchführen...
-
Ich hab ehrlich gesagt noch nichts vom Vector gehört, aber so wie es aussieht, kann ich den genauso wie ein Array behandeln + zusätzliche Funktionen? Das ist ja super und hilft mir echt.
Nur noch eine Frage: Kann ich einen Vector für jeden beliebigen Datentyp (auch selbst definierte Klassen) benutzen?
Basti
-
ethereal schrieb:
nanana, wir sind hier im c++-forum und da soll man doch schön brav den vector instead of "normale arrays" benutzen
Wobei das nicht ohne weiteres eine Lösung für s-bolz's Problem sein muss. Immerhin benutzt er in seinem Beispiel ein nichtdynamisches Array.
@s-bolz
array != vector
Für mich ist es momentan schwer nachvollziehbar, ob du Verständnisprobleme hast. Ein Array ist nichts anderes als ein Speicherbereich von n Elementen eines Typs. Dort wird nix gelöscht. Du kannst lediglich Elemente mit neuen Werten überschreiben.
std::vector hingegen ist mehr als nur ein simples Array, es ist eine Sequenz von Elementen. Und wie man Elemente aus dieser Sequenz löscht, wurde ja bereits geschrieben.
-
im wesentlichen meiner meinung nach schon. aber denk an den speicher. der vector allokiert dynamisch, demnach kann ein großer vector vom typ einer großen klasse schnell man den heap in die knie zwingen, je nachdem, wie deine hardware-konfiguration mitspielt...
-
groovemaster schrieb:
Wobei das nicht ohne weiteres eine Lösung für s-bolz's Problem sein muss. Immerhin benutzt er in seinem Beispiel ein nichtdynamisches Array.
Ein Array ist nichts anderes als ein Speicherbereich von n Elementen eines Typs. Dort wird nix gelöscht. Du kannst lediglich Elemente mit neuen Werten überschreiben.
s-bolz schrieb:
Wie kann ich ein Element in einem Array explizit löschen?
also doch löschen...klingt dann nach jeder menge dynamik -> vector.
-
ethereal schrieb:
s-bolz schrieb:
Wie kann ich ein Element in einem Array explizit löschen?
also doch löschen...klingt dann nach jeder menge dynamik -> vector.
Wenn es notwendig ist, dann ja. Aber weder du noch ich kennen s-bolz's Problem genug, um beurteilen zu können, ob dies der Fall ist.
-
Doch das Problem lässt sich wahrscheinlich nur mit Vector lösen. Falls ihr Interesse habt, ich habe mein Problem in einem parallelen Thread diskutiert und dabei bin ich bei einer anderen Schwierigkeit auch auf den Vector gekommen....
(Thread: Schon wieder ein problem im Array!!)
http://www.c-plusplus.net/forum/viewtopic.php?t=92349Vielen dank für eure Hilfe!!
Basti
-
@groovemaster: nimm's nich so ernst