2017-04-04 84 views
2

問題是這樣的:我需要創建一個位圖(一系列二進制標誌)來保存有關一堆對象的真/假信息;對象的數量並不是先驗已知的,所以我必須在運行時分配足夠的標誌,可能在位圖創建期間。C++位圖保存二進制標誌

鑑於max_num_elements元素,我的第一個想法是分配的((num_elements/8)+1)*sizeof(char)位的數組:因爲char是8位長,它可以處理8個二進制標誌,所以我得到的char S中minimun號舉行num_elements標誌,具有最大內存浪費7bits。

真正的問題是檢查/設置標誌:我因子評分做全陣列,然後按位和一些bitshifting獲得標誌N像

flag_n = (flag_array>>n)&0d1 

,但如果我理解正確的話,這個變速操作不會影響整個數組,只是第一個元素。

我該如何做到這一點?

+0

除非我失去了一些東西,爲什麼不是一個長而不是位圖。第一位對於某些屬性保持真/假,對於另一屬性保持第二位等等。 – Eugene

回答

1

std::vector<bool>專門用於實現這一點。

It is actually a problem in many cases,因爲對元素的訪問返回的是代理對象而不是bool&,所以它不像所有其他容器那樣工作,但在您的情況下,它似乎適合您的需要。

+0

非常感謝@bobtfish,不知道這個專業化,它會非常有幫助。 但閱讀鏈接我也發現[std :: bitset](http://en.cppreference.com/w/cpp/utility/bitset/bitset),這符合我最需要的,所以我會去的我的項目。 – fudo