Zwei Vektoren vom Typ bool XOR-Verknüpfen
-
Hallo alle zusammen,
ich habe eine Funktion geschrieben um zwei Vektoren vom Typ bool miteinander XOR zu verknüpfen:
vector<bool> VecBoolXOR(vector<bool> a, vector<bool> b){ vector<bool>::iterator VBI_A = a.begin(); for(vector<bool>::iterator VBI_B = b.begin(); VBI_B != b.end(); ++VBI_B){ *VBI_A = *VBI_A ^ *VBI_B; ++VBI_A; } return a; }Kennt jemand eine möglichkeit das ganze noch schneller zu lösen?
Eventuell auch mit einer anderen Architektur als vector<bool>, sie muss jedoch Größenvariabel sein.Ich würde mich über jede antwort freuen.
MfG Mars337
-
std::transform(a.begin(), a.end(), b.begin(), outputItr, std::bit_xor<bool>());
-
wenn es um geschwindigkeit geht, bist du uU mit vector<char> schneller als mit vector<bool>...
-
Boost.DynamicBitset dürfte etwas für dich sein. Ist garantiert schneller als vector<bool> und der vector<signed char> von Shade.
Lässt sich sonst auch selber nachbauen.
-
Hey

Danke an euch, habe direkt mal die Lösung von Nexus probiert, funktioniert einwandfrei

Gibt es für diese Funktion auch die Möglichkeit nur Teile eines Vektors zu verwenden?
Als Beispiel habe ich zwei Vektoren mit Zehn Elementen, möchte aber nur die Elemente 3-7 beider Vektoren XOR-Verknüpfen.
Bis hier hin schonmal tausend Dank euch

MfG Mars337
-
Mars337 schrieb:
Hey

Danke an euch, habe direkt mal die Lösung von Nexus probiert, funktioniert einwandfrei

Gibt es für diese Funktion auch die Möglichkeit nur Teile eines Vektors zu verwenden?
Als Beispiel habe ich zwei Vektoren mit Zehn Elementen, möchte aber nur die Elemente 3-7 beider Vektoren XOR-Verknüpfen.
Bis hier hin schonmal tausend Dank euch

MfG Mars337
Ja natürlich! Wozu existiert denn das Iteratoren-Konzept?! Und dazu wird es noch einfacher, da die Iteratoren von
std::vectorrandom-access sind.Ich nehme mal an, du meinst ein rechtsoffenes Intervall [3, 7)? Also drittes Element inklusive, siebtes exklusive?
std::transform(a.begin() + 2, a.end() + 6, b.begin() + 2, outputItr, std::bit_xor<bool>());
-
Ganz genau!
Nochmals vielen Dank