Ich verwende memcpy, um den Inhalt von std zu kopieren: vectors & lt; & gt; Primzahlen Arrays. Für Datentypen wie int, float, double usw. hat es gut funktioniert. Als ich anfing, einen boolvector zu kopieren, stieß ich auf ein Problem, nämlich seltsame Werte.
Zuerst habe ich eine Testausgabe für einen Float-Vektor gemacht:
%Vor%Die Ausgabe ist:
%Vor%Und das ist, was ich erwarte. Die Float-Größe beträgt 4 Byte und die Entfernung zum nächsten Float-Wert beträgt 4 Byte. Wenn ich das für bool mache, sieht die Ausgabe so aus:
%Vor%Die Ausgabe ist:
%Vor%Warum ist die Größe von bool 16 Byte? Es scheint mir total übertrieben zu sein. Gibt es dafür Erklärungen?
Im Gegensatz zu anderen Spezialisierungen von vector
verwaltet vector<bool>
kein dynamisches Array von bool
-Objekten. Stattdessen soll es die booleschen Werte in jeweils ein einzelnes Bit packen.
Da einzelne Bits nicht adressierbar sind, kann test[0]
nicht einfach eine Referenz auf bool
sein. Stattdessen ist es ein Klassentyp vector<bool>::reference
, der in bool
konvertiert werden kann (um den Wert zu erhalten) und von bool
zugewiesen wird (um das Vektorelement zu ändern).
Dies bedeutet, dass vector<bool>
die Anforderungen eines Standardcontainers nicht vollständig erfüllt und nicht verwendet werden kann, wenn Sie Verweise oder Zeiger auf seine Elemente benötigen. Wenn Sie einen "echten" Container mit adressierbaren Elementen benötigen, berücksichtigen Sie stattdessen vector<char>
oder deque<bool>
.
std::vector<bool>
ist eine spezialisierte Vektorversion, die für den Speicherplatz optimiert ist.
Weitere Informationen: Ссылка