1

私が持っている場合:

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 ... abcd5

これは私が欲しいものではありません

しかし、もしそうなら:

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 が返されるようで、今とても混乱しています。

4

2 に答える 2

10
bool shuffle(string & s){
                    ^

文字列を値で取得しているため、渡された引数を変更していないため、同じ文字列を何度も関数に渡しています。

于 2013-02-18T20:33:31.293 に答える
3

next_permutationは、現在の状態を維持するために文字列を変更しています。中間関数シャッフルを使用して、元の文字列のコピーを変更します。この問題を解決するには、次のようにシャッフルを定義してみてください。

bool shuffle(string &s)
于 2013-02-18T20:34:42.310 に答える