我写了这个程序:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
void permute(char a[],int i=0, vector<string> &vs){
if(a[i]==' '){
//cout<<a<<endl;
string s(a);
vs.push_back(s);
return;
}
for(int j=i;a[j]!=' ';j++){
swap(a[i],a[j]);
permute(a,i+1,vs);
swap(a[i],a[j]);
}
}
int main()
{
char a[25] ;
cin>>a;
vector<string> vs;
permute (a,0,vs) ;
sort(vs.begin(),vs.end());
for(int j=0;j<vs.size();j++)
{
cout<<vs[j]<<endl;
}
return 0;
}
编译器提示" void permute()的参数3缺少默认参数"我不知道如何给一个默认值的矢量vs,我正在传递。请帮助
一旦您为一个参数指定了默认值,您就必须为以下所有参数指定一个默认值。
所以只要改变参数的顺序:
void permute(char a[], vector<string> &vs,int i=0){
对于vector<string> &
参数,您不能真正传递一个合理的默认值,而是传递一个全局引用之类的。
只能为函数的最后一组参数指定默认值:
void permute(char a[],int i=0, vector<string> &vs){
这里,为三个参数中的第二个参数提供了默认值。如果为第二个参数提供了默认值,则必须为第三个参数也提供默认值。有默认值的形参不能后跟没有默认值的形参。
然而,在这种情况下,看起来默认值根本不需要,所以只需删除它