我试图从一个函数返回一个字符串向量,但是每次这样做都会得到一个空向量,但是当我尝试在函数本身中打印向量时,它并不为空,但是当我尝试打印该向量时返回的向量我什么都没打印。
#include <iostream>
#include <vector>
using namespace std;
vector<string> permute(string S, string chosen){
vector<string> permutated_strings;
if(S.empty())
permutated_strings.push_back(chosen);
else{
for(int i=0;i<S.length();i++){
char c = S[i];
chosen += c;
S.erase(i,1);
permute(S,chosen);
//backtrack
chosen.erase(chosen.length()-1,1);
S.insert(i,1,c);
}
}
return permutated_strings;
}
int main() {
//code
int test;
cin >> test;
while(test)
{
string S;
cin >> S;
vector<string> vec;
vector<string> ::iterator i;
vec = permute(S,"");
for(i=vec.begin();i!=vec.end();i++)
cout<<*i<<" ";
cout << "\n";
test--;
}
return 0;
}
当我在permute函数中打印矢量时,我得到正确的结果,但是当我在main函数中打印矢量时,它为空。有人可以指出我的错误吗?
答案 0 :(得分:4)
您需要保存permute
方法的递归调用结果。
auto result = permute(S,chosen);
permutated_strings.insert(permutated_strings.end(), result.begin(), result.end());
答案 1 :(得分:-1)
我犯了我在做的错误。我真的很讨厌回答自己的问题,但将来可能会对像我这样的人有所帮助。
我已经改变-
vector<string> permutated_strings;
到
static vector<string> permutated_strings;
在permute函数中使用,以便不会丢失递归调用的先前返回。这样我得到了预期的结果。
感谢大家指出我所犯的错误。
编辑
如@ M.M所建议,此解决方案将来可能会引起问题。而且我已经意识到,如果我将“ test”值设为2,则permutated_strings中的最终值将来自test = 1 + test = 2,这不是我想要的。因此,此解决方案不是完美的解决方案。相反,我接受来自@BartekPL的解决方案。