2013-02-18 3 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

который НЕ что я хочу

Однако, если я do:

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

3

next_permutation изменяет вашу строку, чтобы сохранить текущее состояние. С вашей промежуточной функцией shuffle вы модифицируете копию исходной строки. Чтобы решить проблему, попробуйте определить тасование следующим образом:

bool shuffle(string &s) 
+0

Получил, спасибо! – HoKy22

Смежные вопросы