簡體   English   中英

獲取非專用std :: vector的標准方法 <bool> 容器

[英]Standard way of getting a non-specialized std::vector<bool> container

是否有一種標准的方法(或至少是半標准的,在所有流行的編譯器中實現)來獲得非專業的,非優化的,連續的std::vector<bool>容器?

我有一些處理std::vector的通用代碼,它假設它們都是這樣的標准連續容器。 我目前的解決方法是使用std::vector<int> ,它只存儲0和1,這是我想要的內容,但擁有正確的矢量類型會更好。

作為解決方法,您可以使用其他類型,請記住char 否則你可以在bool周圍寫一個包裝器,例如:

struct my_bool
{
    operator bool() const { return b; }
    operator bool&() { return b; }

    bool b;
};

通常,使用std::vector<bool>專業化並不是一種好的做法,當然也不例外。 主要是因為它的接口與主std::vector<T>接口不同,這會引起很多混亂。

這種不規則性在一些在網絡上松散的出版物中被提及。 最近的一個和恕我直言,一個很好的閱讀是由Howard Hinnant寫的,即vector<bool>

事實上,前一段時間有人建議將其從標准N1185中刪除 ,但由於向后兼容性問題而被拒絕。

大多數提出的半標准替代方案是使用std::vector<unsigned char>std::vector<char>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM