我有一個給定長度的C++位集。我想生成這個bitset的所有可能的組合,爲此我想添加1 2^bitset.length時間。這個怎麼做? Boost庫解決方案也可以接受加1到C++位集
加1到C++位集
回答
所有可能的組合?只需使用64位無符號整數,讓您的生活更輕鬆。
然後,我將不得不將這個整數轉換爲bitset一次又一次地檢索個別位的值。由於位集<一些可變大小>在STL位集中是不可能的,因此我將使用boost。如果我讓bitset < value > mybitset,和值= 2,我將需要00010而不是10.這可能嗎?希望它對您有意義:) – wirate 2012-04-28 11:34:18
不,您不必將其轉換回bitset以檢索單個位 - 學習如何使用按位運算符。 00010與10相同;它只取決於你想要提取的整數的前導零。 – zvrba 2012-04-28 11:37:22
你的意思是我可以看看如果第三位的int是否設置?請指點我的地方! – wirate 2012-04-28 11:39:41
試試這個:
/*
* This function adds 1 to the bitset.
*
* Since the bitset does not natively support addition we do it manually.
* If XOR a bit with 1 leaves it as one then we did not overflow so we can break out
* otherwise the bit is zero meaning it was previously one which means we have a bit
* overflow which must be added 1 to the next bit etc.
*/
void increment(boost::dynamic_bitset<>& bitset)
{
for(int loop = 0;loop < bitset.count(); ++loop)
{
if ((bitset[loop] ^= 0x1) == 0x1)
{ break;
}
}
}
+1 v.useful - ty – kfmfe04 2013-03-19 08:59:19
使用boost庫,你可以嘗試以下方法:
例如,長度的位集4
boost::dynamic_bitset<> bitset;
for (int i = 0; i < pow(2.0, 4); i++) {
bitset = boost::dynamic_bitset<>(4, i);
std::cout << bitset << std::endl;
}
- 1. 將1加1到32位的位集
- 2. 加載(0/1)串到位數組
- 3. C#追加到佔位符
- 4. 在C#中反轉1位#
- 5. 24位到1位位圖轉換
- 6. C到程序集調用約定32位和64位
- 7. MPAndroidChart如何將數據集移動到位置-1後刪除位置0
- 8. 轉換1位圖像到8位
- 9. 添加收藏從1項集2,如果收集2不從收集1
- 10. 分配位集合的C++
- 11. 位集合印刷用C
- 12. 追加1到32位數字到字符緩衝區
- 13. ASP.NET c#添加行到數據集
- 14. 添加到C++中的指針位置
- 15. 將位附加到C中的文件
- 16. 在c中增加1#
- 17. 快速位集追加?
- 18. 附錄C.-集成在Eclipse Mars.1中
- 19. 我們是否稱第1位或第1位爲第1位?
- 20. 將32位位圖保存爲C#中的1位.bmp文件
- 21. 移植從C++到C#代碼 - 與RSA PKCS#加密1私鑰
- 22. C#得到位
- 23. C++從內存中讀取1位?
- 24. C#。計數連續1位在ulong
- 25. C++ setprecision(設置小數位數1-10)
- 26. 轉換位運算(I&1)從C++到Java
- 27. 按位操作C#陣列元件(0-1)轉印到整數
- 28. 如何找到最左邊的1 32位INT用C
- 29. 具有1:1鍵/值映射的C#集合數據結構
- 30. 將行收集到1行並添加列
嗯......我不能看到一個添加操作並手動檢查所有位似乎不可行。所以我還沒有嘗試過任何東西 – wirate 2012-04-28 11:21:27