2012-02-16 16 views
2

我有一個函數來增加位串如下:如何遍歷所有的位串,一個0,2個0,一直到n 0s?

void increment(boost::dynamic_bitset<> &bitset) 
{ 
    for (int loop = 0; loop < bitset.size(); ++loop) 
    { 
     if ((bitset[loop] ^= 0x1) == 0x1) 
     { 
      break; 
     } 
    } 
} 

我想一個名爲相同的方式爲增量將被調用的函數,但不同的修改位串。每次調用它時,我都想獲得與前一個相同數量的0的下一個位串。

例如,如果位串的長度爲10,則前10個調用此函數將給一個位串帶一個0.然後,調用11到20將返回具有2個0的位串。我希望這個過程繼續下去,直到bitstring全部爲0。

我該如何設置這樣的功能?謝謝!

+0

看起來像一個XY問題 – 2012-02-16 22:13:03

+0

如果你的字符串只有長度10,你可以迭代整數範圍'[0,1 << 10)'並使用這些整數。 – 2012-02-16 22:18:46

+0

@SethCarnegie好的,澄清問題:)我用一個比特串表示一組大對象,並且想對這個比特串的所有子集做一些測試。然而,我知道我感興趣的子集通常只有一些元素缺少,所以我想從所有被刪除的元素開始生成所有子集並向下工作。 – Jim 2012-02-16 22:20:16

回答

0

您可以在Matters Computational的章節1.24.3「換班」中找到答案。您必須將整數更改爲位集並翻轉值。當與bitset一起使用時,這種實現可能不是最優的。