2013-02-18 103 views
1

如果我有後不同的結果:next_permutation有被稱爲功能

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,所以我現在很困惑。

回答

10
bool shuffle(string & s){ 
        ^

因爲您是通過值來傳遞字符串,所以不會修改傳遞的參數,所以您一次又一次地將相同的字符串傳遞給函數。

+0

很好的接收,非常感謝! – HoKy22 2013-02-18 20:35:12

3

next_permutation正在修改您的字符串以維持當前狀態。使用中間函數shuffle可以修改原始字符串的副本。爲了解決這個問題,試着定義這樣的洗牌:

bool shuffle(string &s) 
+0

明白了,謝謝! – HoKy22 2013-02-18 20:36:04