今天早些时候,我问了一个关于获取所有可能组合的问题,我得到了一个关于使用二进制循环的很好提示,经过一些思考后,我想出了以下 C++ 代码:
vector<bool>binary(size,0);
bool filled=false;
while(filled==false)
{
bool setdigit=true;
for(int k=0;k<size;k++)
{
if(setdigit==true)
{
if(binary[k]==false)
{
binary[k]=true;
setdigit=false;
}
else //when the digit is already true
{
binary[k]=false;
}
}
}
for(int i=0;i<size;i++)
{
if(binary[i]==false)
{
filled=false;
break;
}
else filled=true;
}
}
代码似乎可以运行,但是测试二进制增量是否完成的方法编码非常糟糕,我应该如何改进退出条件甚至循环过程?
最佳答案
伪代码:
for (i=0;i<2^size;i++)
binary = std::bitset(i); /* the bits of i are the bits you are looking for */
关于c++ - 优化二进制增量循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129078/