Problem mit der Übergabe eines Arrays
-
Hallo,
ich habe folgendes Problem. Ich möchte ein Dynamisches Array an ein Objekt der Klasse CBitList übergeben und dort als Attribut speichern. Momentan mache ich es so:main()
#include <iostream> #include "bit.h" using namespace std; int main() { int *arr; arr = new int[5]; arr[0]=1; arr[1]=-1; arr[2]=0; arr[3]=1; arr[4]=-1; // CBitList erzeugen und direkt das Array arr übergeben. CBitList bit(arr); // Das Array arr ändern arr[0]=0; // Ich möchte das Array in bit speichern, abe rnicht als Zeiger, denn // wenn ich jetzt arr verändere, ändert sich auch das Array im Objekt // Und das möchte ich nicht cout << arr << "=" << arr[0] << endl << bit.getBit() << "=" << bit.getBit()[0]; cin.get(); cin.get(); return 0; }bit.h
class CBitList { private: int *bit; public: CBitList(int *arr); CBitList(int bitint); int *getBit(); void setBit(int index,int wert); void setBit(int *arr); bool compareBit(int *arr); };Ausschnitt aus der bit.cpp
#include "bit.h" CBitList::CBitList(int *arr) { bit = arr; } int *CBitList::getBit() { return bit; }Wie kann ich das Array anders übergeben/speichern? So, dass ich dann in dem Objekt eine Kopie davon habe, und nicht nur den Zeiger darauf.
Ich hoffe jemand kann mir helfen
Grüße,
Samuirai
-
Du suchst std::vector.
-
Samuirai schrieb:
Wie kann ich das Array anders übergeben/speichern? So, dass ich dann in dem Objekt eine Kopie davon habe, und nicht nur den Zeiger darauf.
Indem du dem Konstruktor nicht nur den Pointer übergibst sondern auch noch die Länge, dann ein entsprechendes neues dynamisches Array anlegst mit der entsprechenden Länge und alle Elemente des Originalarrays in das neue Array rüberkopierst. Nicht zu vergessen das delete[] im Destruktor deiner Klasse.
Alternativ nimmst du std::vector, der macht das alles automatisch.
-
Ein Vector ist doch aber langsamer als ein Array oder?
Es muss nacher schon sehr optimiert laufen.
Ist es wirklich so umständlich, dass ich die Länge übergeben muss und dann einzeln Kopieren? Geht das nicht schneller?Grüße,
Samuirai
-
Wenn du eine Kopie haben willst, dann kommst du um das kopieren nicht rum..

Und nein.
std::vectorist nicht viel langsamer, als ein C Array. Im Release Modus hast du keinen spürbaren Unterschied. Und wenn du unbedingt meinst, dass es nötig ist, dann kannst du auch nochtr1::arrayoderboost::arraybenutzen, was exakt das gleiche ist, wie ein C Array, einfach mit der erwarteten Kopiersemantik (und ein paar anderen nützlichen Sachen) und im Release kocht das ganze auf ein C Array runter.
-
Achso gut

Das habe ich nicht gewusst. Dann werde ich das mit std::vector machen.
Vielen Dank für die schnellen Antworten.Grüße,
Samu