将布尔数组视为二进制递增

Treating an array of bools as though incrementing in binary

我正在尝试创建一个循环来更改布尔数组中的值,以便该数组看起来像二进制值递增。

例如

1st iteration [0|0|0]
2nd iteration [0|0|1]
3rd iteration [0|1|0]
4th iteration [0|1|1]

等等

但是,这个数组是动态的,并且可以有不同的大小。因此,无论我编写什么循环,都需要在包含五个元素而不是三个元素的数组上工作。

抱歉没有任何起始代码,但我已经为此感到沮丧了几个小时,甚至仍然想不出如何开始。

尝试this。这可能不完整,但您可以做类似的事情

#include <iostream>
using namespace std;

void increment(bool* array, int len)
{
    for (int i = len - 1; i >= 0; --i)
    {
        if ( ! array[i])
        {
            array[i] = true;
            return;
        }
        array[i] = false;
    }
}

int main()
{
    bool* array = new bool[10];

    for (int i = 0; i < 5; ++i)
    {
        increment(array, 10);

        for (int i = 0; i < 10; ++i)
        {
            cout << (array[i] ? 1 : 0) << "|";
        }
        cout << endl;
    }

    return 0;
}
#include <iostream>
#include <cmath>
#include <memory>

using namespace std;

void ArrayIterate(int);
void printArray(bool*,int);

void ArrayIterate(int arraySize)
{
    int decimal_value = 0;
    int decimal_place_value = 0;
    bool* boolArray = new bool(arraySize);
    long double max_itr = pow(2,arraySize);
    for (int i = 0; i < max_itr ; ++i)
    {
        decimal_value = i;
        // set array values
        for ( int k = arraySize - 1; k >= 0; --k)
        {
            decimal_place_value = pow(2,k);
            if( decimal_value != 0 && decimal_value / decimal_place_value >= 1 )
            {
                boolArray[k] = true;
                decimal_value -= decimal_place_value;
            }
            else
                boolArray[k] = false;
        }
        printArray(boolArray,arraySize);
        cout << " = " << i << endl; ;
    }
    delete boolArray;
    return;
}

void printArray(bool* boolArray, int arraySize)
{
    cout << "\t";
    for(int i = arraySize - 1; i >= 0; --i)
        cout << ((boolArray[i] == true)? 1 : 0) << " ";
    return;
}

int main()
{
    cout << "\n\n";
    ArrayIterate(4); 
    cout << "\n\n" << endl;
    return 0;
}