set<string> generatePermutations(string str) {
set<string> result;
if (str == "") {
result.insert("");
}
else {
for (int i = 0; i < str.length(); i++) {
char ch = str[i];
string rest = str.substr(0, i) + str.substr(i + 1);
for (string s : generatePermutations(rest)) {
result.insert(ch + s);
}
}
}
return result;
}
抱歉之前看错题目了,这个是c++11新增的,用于遍历(我猜是依次把)generatePermutations(rest) 的内容按下标放进string变量s, 自动探测下标是否越界
这个类似的可以参考:
vector<int> ints;
//pushback...
for (auto i:ints){...}
翻译成现代汉语:先初始化整形变量 i 为0,(第一个分号),然后是循环条件,i小于字符串长度(第二个区域),最后是i自增1,相当于i=i+1(你写成i+=1也无所谓).第一个区域只会运行一次,第二个区域是执行条件,当不满足这个条件(在你这里是字符串下标越界),就自动跳出循环,第三个区域是每次都要执行的语句,每循环一次就会i自增1
for()里面第一部分是定义一个for循环里的变量,第二部分是判断是否继续循环