我在对空终止的字符数组使用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)));
}
答案 0 :(得分:1)
如果要使用规范do ... while(std::next_permutation)
循环访问所有排列,则需要初始化数组,使其按排序顺序排列。这样做的原因是std::next_permutation
算法计算在当前字典之后的字典顺序中的下一个排列。在您的情况下,您已经以反向排序顺序开始使用数组,因此算法将在第一时间返回false。
您可以更改代码以初始化数组,也可以保留它并预先添加对std::reverse
的调用。