next_permutation在函数中调用后有不同的结果

时间:2013-02-18 20:31:50

标签: c++ stl

如果我有:

bool shuffle(string s){
    return next_permutation(s.begin(), s.end());
}

int main(int argc, char* argv[]){    
        string m = "abcde5";
    do {
        cout << m << endl;
    } while(shuffle(m));

我会得到:

abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 abcde5 ... abced5

我想要的

但是,如果我这样做:

int main(int argc, char* argv[]){    
string m = "abcde5";
do {
    cout << m << endl;
} while(next_permutation(m.begin(), m.end()));  

我会得到

abcde5 abce5d abced5 abd5ce abd5ec abdc5e abdce5 abde5c abdec5 abe5cd abe5dc abec5d abecd5 abed5c abedc5 ac5bde ac5bed ac5dbe ac5deb ac5ebd ac5edb acb5de acb5ed acbd5e acbde5 ... edcba5

我想要的

有什么区别?我查了下next_permutation,看起来它返回了一个bool,所以我现在真的很困惑。

2 个答案:

答案 0 :(得分:10)

bool shuffle(string & s){
                    ^

你一遍又一遍地将相同的字符串传递给函数,因为你是按值取字符串,所以不修改传递的参数。

答案 1 :(得分:3)

next_permutation正在修改你的字符串以保持当前状态。使用中间函数shuffle,您可以修改原始字符串的副本。要解决这个问题,请尝试像这样定义shuffle:

bool shuffle(string &s)