在chars数组上使用next_permutation

时间:2016-01-31 02:56:12

标签: c++ arrays algorithm stl

我在对空终止的字符数组使用next_permutation时遇到了问题。当我在do while语句中登录时,它只给出了我开头的charArray的第一个字符,而不是给我所有可能排列的第一个字符。这是代码:

void generatePermutations(int no_ones, int length){

    char charArray[length+1];

    for(int i = 0; i < length; i++){
        if(no_ones > 0){
            charArray[i] = '1';
            no_ones--;
        }else{
            charArray[i] = '0';
        }
    }
    charArray[length] = '\0';

    do {
        std::cout << charArray[0] << std::endl;
    } while ( std::next_permutation(charArray, (charArray + length)));

}

1 个答案:

答案 0 :(得分:1)

如果要使用规范do ... while(std::next_permutation)循环访问所有排列,则需要初始化数组,使其按排序顺序排列。这样做的原因是std::next_permutation算法计算在当前字典之后的字典顺序中的下一个排列。在您的情况下,您已经以反向排序顺序开始使用数组,因此算法将在第一时间返回false。

您可以更改代码以初始化数组,也可以保留它并预先添加对std::reverse的调用。