2016-04-12 34 views
4

如何在C++中創建bool數量的連續向量?我讀了很多警告,反對使用std::vector<bool>,我想將面具存儲到std::vector<double>如何在C++中創建一個連續的bools向量?

爲了讓我的目的更加清晰一些,我想將的統計數據應用於bool向量中的那些元素。爲了達到最佳性能,我希望矢量是連續的。

+0

爲什麼不只是一個''std :: vector '?我不明白麪具的一部分。 – rodrigo

+0

它用於數據分析目的:使用掩碼我標記應排除的元素。出於性能原因,我想要一個在內存中連續的掩碼。 – Chiel

+1

@rodrigo'載體'與'載體'完全不同。 'vector '的8個元素佔用1個字節,而'vector '的8個元素佔用8個字節。 – PhotometricStereo

回答

4

你需要知道什麼是人找到std::vector<bool>問題的具體問題,因爲他們不neccessarily適用在你的情況。其中最重要的可能是它並不是必須連續的。這裏連續可能是一個用詞不當。分配給整個向量的內存仍然可能位於連續塊中,但是,&vec[0] + i將不會與&vec[i]相同。

然而,許多其他std::vector品質仍然存在 - 例如,它仍然提供了恆定時間的隨機存取。

底線 - 不要簡單地害怕,而要明白其含義。

+0

您的意思是數據實際上是連續的嗎? – Chiel

+2

@Chiel,我的意思是這樣一個向量仍然會提供恆定的時間隨機訪問。實現這一點的唯一方法是將你的打包布爾值存儲爲連續的內存。因此,它仍然是緩存友好的。 – SergeyA

+1

@Chiel瞭解,然後配置文件,配置文件,配置文件。從軌道上移除網站是唯一可行的方法。 – user4581301

0

使用std::bitset 類模擬布爾元素的數組,但是從引空間分配 優化:http://www.cplusplus.com/reference/bitset/bitset/

+3

編譯時必須知道'std :: bitset'的大小。如果OP使用矢量,他們可能不知道大小,這意味着他們不能使用「std :: bitset」。 – NathanOliver

+0

那麼,你也可以寫一個使用已知大小的位組向量進行優化的步驟 – Rama

+0

據我所知,Bitset不是連續的,這是我的具體問題... – Chiel

相關問題