![](/img/trans.png)
[英]C++ The data type for a sentinel value is always a boolean? True or false?
[英]Efficient use of boolean true and false in C++?
任何編譯器專家都能對布爾值的有效使用發表評論嗎? 具體來說,編譯器是否能夠優化std::vector<boolean>
以使用最少的內存? 是否有一個等效的數據結構?
過去,有些語言的編譯器可以將布爾數組壓縮為每個布爾值僅一位的表示形式。 也許對C ++最好的方法是使用std::vector<char>
來存儲布爾值以最小化內存使用量?
這里的用例將存儲數億個布爾值,其中一個字節將為每個值節省4個或更多字節的空間,而一個位甚至更多。
專長
標准庫為bool類型提供了std :: vector的特殊化,已針對空間效率進行了優化。
vector <bool>空間高效的動態位集(類模板專門化)
和來自“ Working Draft C ++,2012-11-02”
23.3.7類向量[vector.bool]
1為了優化空間分配,提供了bool元素的vector的特殊化:
模板<class Allocator> class vector <bool,Allocator> {
...
}3不需要將數據存儲為布爾值的連續分配。 建議使用空間優化的位表示形式。
因此,沒有必要(僅建議)將bool
值存儲為位。
注意, vector<bool>
不是容器,但是它假裝為一個並提供迭代器。 有一天,如果您像對待普通容器一樣對待它,可能會造成混亂和錯誤,例如,嘗試獲取元素地址。
如果您需要為每個布爾值存儲1位,則可以考慮std::bitset
或boost :: dynamic_bitset 。 這些數據結構並不假裝為容器,因此使用它們中的任何一個都不太可能出錯,尤其是在模板代碼中。
在標准中普遍認為的缺陷中, std :: vector專門用於使用單個位來表示每個bool
值。
如果恰好是您要尋找的東西,請使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.