Anfängerfrage: Vertauschen von Arrayinhalten
-
-
Undertaker schrieb:
wenn man assembler auf c(++) anwendet, lol
-
rapso schrieb:
Undertaker schrieb:
wenn man assembler auf c(++) anwendet, lol
ja, hihi, ich weiss - mit einer temporären variable ist man meistens besser dran.
aber XOR sieht doch schick aus
und ausserdem sind C und assembler ja nicht sooo weit voneinander entfernt.

-
ja danke schön!
-
Undertaker schrieb:
und ausserdem sind C und assembler ja nicht sooo weit voneinander entfernt.

Wir sind hier aber nicht in C, sondern in C++ (nur falls du es übersehen hast). Und der XOR-Swap mag ja für primitive Daten (und platzkritische Aufgaben) wie int's die "ideale" Lösung sein, ein Versuch, den auf vollwertige Objekte umzusetzen, wäre aber tödlich für ein Programm.
-
CStoll schrieb:
...ein Versuch, den auf vollwertige Objekte umzusetzen, wäre aber tödlich für ein Programm.
erklärung bitte...

-
In Kurzfassung: Jeder Versuch, vollwertige Objekte auf Binär-Ebene zu manipulieren, ist potentiell tödlich, weil du dabei bestimmte Invarianten verletzt, auf deren Einhaltung die Klassenmethoden vertrauen.
(z.B. verwende ich in einer Kontrollklasse einen vector von Objekten, die wiederum jeder einen Zeiger auf ihren Controller haben - bei einem XOR-Swap würde ich nur die Binärrepresentation der internen vector-Daten austauschen, aber die vector-Elemente arbeiten plötzlich mit dem falschen Controller zusammen - der klassische Dreieckstausch nutzt meinen op= und passt darum auch die unterliegenden Objekte an)
-
CStoll schrieb:
- der klassische Dreieckstausch nutzt meinen op= und passt darum auch die unterliegenden Objekte an)
d.h. du brauchst einen ganz speziellen op=, der eventuell auch kenntnis von dem controller hat? kann man sich beliebig viele op= anlegen? einen für jeden zweck?

-
Undertaker schrieb:
CStoll schrieb:
- der klassische Dreieckstausch nutzt meinen op= und passt darum auch die unterliegenden Objekte an)
d.h. du brauchst einen ganz speziellen op=, der eventuell auch kenntnis von dem controller hat? kann man sich beliebig viele op= anlegen? einen für jeden zweck?

Nein, ich habe einen speziellen op= im Controller - der weiß, daß er die vector-Elemente umbiegen muß.
-
Undertaker schrieb:
rapso schrieb:
Undertaker schrieb:
wenn man assembler auf c(++) anwendet, lol
ja, hihi, ich weiss - mit einer temporären variable ist man meistens besser dran.
aber XOR sieht doch schick aus
und ausserdem sind C und assembler ja nicht sooo weit voneinander entfernt.

weit genug um solche unsinnigen dinge zu machen. vielleicht wird es dir verstaendlich wenn du dir ueberlegst, dass eine cpu nur auf registern arbeitet.
simples swap macht also dann in assembler
register a = Array[x] register b = Array[b] Array[x] = b; Array[y] = a;und nun mit dem funky assembler trick von 1980
register a = Array[x] register b = Array[b] a^=b; b^=a; a^=b; Array[x] = a; Array[y] = b;