如何在C++中創建bool
數量的連續向量?我讀了很多警告,反對使用std::vector<bool>
,我想將面具存儲到std::vector<double>
。如何在C++中創建一個連續的bools向量?
爲了讓我的目的更加清晰一些,我想將的統計數據應用於bool
向量中的那些元素。爲了達到最佳性能,我希望矢量是連續的。
如何在C++中創建bool
數量的連續向量?我讀了很多警告,反對使用std::vector<bool>
,我想將面具存儲到std::vector<double>
。如何在C++中創建一個連續的bools向量?
爲了讓我的目的更加清晰一些,我想將的統計數據應用於bool
向量中的那些元素。爲了達到最佳性能,我希望矢量是連續的。
你需要知道什麼是人找到std::vector<bool>
問題的具體問題,因爲他們不neccessarily適用在你的情況。其中最重要的可能是它並不是必須連續的。這裏連續可能是一個用詞不當。分配給整個向量的內存仍然可能位於連續塊中,但是,&vec[0] + i
將不會與&vec[i]
相同。
然而,許多其他std::vector
品質仍然存在 - 例如,它仍然提供了恆定時間的隨機存取。
底線 - 不要簡單地害怕,而要明白其含義。
您的意思是數據實際上是連續的嗎? – Chiel
@Chiel,我的意思是這樣一個向量仍然會提供恆定的時間隨機訪問。實現這一點的唯一方法是將你的打包布爾值存儲爲連續的內存。因此,它仍然是緩存友好的。 – SergeyA
@Chiel瞭解,然後配置文件,配置文件,配置文件。從軌道上移除網站是唯一可行的方法。 – user4581301
使用std::bitset
類模擬布爾元素的數組,但是從引空間分配 優化:http://www.cplusplus.com/reference/bitset/bitset/
編譯時必須知道'std :: bitset'的大小。如果OP使用矢量,他們可能不知道大小,這意味着他們不能使用「std :: bitset」。 – NathanOliver
那麼,你也可以寫一個使用已知大小的位組向量進行優化的步驟 – Rama
據我所知,Bitset不是連續的,這是我的具體問題... – Chiel
爲什麼不只是一個''std :: vector'?我不明白麪具的一部分。 –
rodrigo
它用於數據分析目的:使用掩碼我標記應排除的元素。出於性能原因,我想要一個在內存中連續的掩碼。 – Chiel
@rodrigo'載體'與'載體'完全不同。 'vector '的8個元素佔用1個字節,而'vector '的8個元素佔用8個字節。 –
PhotometricStereo