Was ist der beste Weg, um 2 Bitsets zu verketten?
Zum Beispiel habe ich
%Vor%Sie sollten in einen dritten Bitset-Test3 verkettet werden, der dann
enthält %Vor%Lösungen sollten boost :: dynamic_bitset verwenden. Wenn die Lösung mit std :: bitset funktioniert, wäre es auch nett. Beim Verketten der Bits sollte der Fokus auf der Leistung liegen.
UPDATE: Ich habe beide Methoden verglichen (stringmethod von mir und Neil und shiftmethod von messenger) und die Stringmethode war viel schneller (Faktor 10 ++). Code hier: Ссылка
Ich hoffe, Pastebin ist in Ordnung, um lange Code-Listings zu veröffentlichen. Wenn es einen besseren Weg gibt, kontaktieren Sie mich bitte.
Ich habe mehrere Lösungen getestet und es sieht so aus:
Hier ist mein Testcode:
%Vor%Hier ist die Ausgabe, die ich mit VS7.1 auf meinem Computer bekomme:
%Vor%Sie können feststellen, dass die Funktion, die ich mit Loops geschrieben habe, unterschiedliche Ergebnisse liefert. Es ist, weil ich dann geschrieben habe, um das LSB des zweiten Bitsets nach dem MSB des ersten zu setzen (LSB auf der rechten Seite). Mit der Funktion String oder "Bit Operator" müssen Sie nur die Aufrufparameter umschalten.
Ich habe einen Test durchgeführt, der die folgenden zwei Ansätze vergleicht:
%Vor% ... wobei randomUlongs
während jedes Laufs konstant war (ein großes Array in einem Header), um alles zu vermeiden, was die Ergebnisse verunreinigt. Ich habe es mit getaktet:
Unter Linux (x86_i686) mit gcc 4.4.6
auf Optimierungsstufe 3: Die Verkettung der Zeichenkette war um den Faktor 2 am schnellsten.
Unter Solaris (sparc) mit gcc 3.4.3
und Sun Studio C++ 5.12 (2011/11/16)
, beide mit Optimierungsstufe 3: Der Non-String-Ansatz war um den Faktor 10 am schnellsten.
Ich denke, Sie werden feststellen, dass die "schnellste" Lösung in hohem Maße vom Compiler abhängt, obwohl ich denke, dass die Plattform auch eine wichtige Rolle spielen könnte.
Für den Anfang werde ich eine mögliche Lösung selbst hinzufügen. Der folgende Code verwendet die Möglichkeit, Bitsets mit std :: string zu konstruieren und eine std :: string von einem Bitset zu generieren.
%Vor%Das funktioniert, aber es muss andere, performantere Lösungen geben ...
Aktualisierung:
Danke an J. C. Leitão für seinen Bearbeitungsvorschlag