如果我有:
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,所以我现在真的很困惑。
答案 0 :(得分:10)
bool shuffle(string & s){
^
你一遍又一遍地将相同的字符串传递给函数,因为你是按值取字符串,所以不修改传递的参数。
答案 1 :(得分:3)
next_permutation正在修改你的字符串以保持当前状态。使用中间函数shuffle,您可以修改原始字符串的副本。要解决这个问题,请尝试像这样定义shuffle:
bool shuffle(string &s)