Ich habe zwei Arrays von Zeigern auf Doubles, die ich tauschen muss. Anstatt nur die Daten innerhalb der Arrays zu kopieren, wäre es effizienter, die Zeiger nur auf die Arrays zu tauschen. Ich hatte immer den Eindruck, dass Array-Namen im Wesentlichen nur Zeiger sind, aber der folgende Code einen Compilerfehler empfängt:
%Vor%Das dynamische Erstellen der Arrays würde das Problem lösen, kann aber nicht in meiner Anwendung durchgeführt werden. Wie mache ich das?
Arrays sind nicht identisch mit Zeigern und können nicht wie beschrieben ausgetauscht werden. Um den Pointer-Tausch-Trick auszuführen, müssen Sie Zeiger verwenden, entweder den Speicher dynamisch zuweisen oder Zeiger verwenden, um auf die Daten zuzugreifen (wie Daniel beschrieben hat).
C-artige Arrays sind keine Zeiger, aber wie die meisten Objekte können sie mit dem Standard std::swap()
:
Eigentlich sieht std :: swap () für Arrays nur in C ++ 0x (20.3.2) aus, also vergiss es. Die richtige Antwort ist für beide Arrays im Bereich und Arrays als Zeiger auf die ersten Elemente:
%Vor%Eine der einfachsten Möglichkeiten, Leute davon zu überzeugen, dass sie keine Zeiger sind und nicht leicht vertauscht werden können, ist der folgende Code:
%Vor% Jetzt sind eindeutig a.d
und b.d
Arrays. Sie zu tauschen, wird harte Arbeit erfordern, da das Array {6,7,8} nach a.c=="foo"
im Speicher enden muss und das heißt 3 Doppelkopien kopieren. Es gibt keinen Zeiger auf dem Bild.
Sie können beide Zeiger auf Arrays durch Referenzen übergeben, und falls Pointer nicht const sind, können Sie sie einfach austauschen:
%Vor%