我写了这个程序:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
void permute(char a[],int i=0, vector<string> &vs){
if(a[i]=='\0'){
//cout<<a<<endl;
string s(a);
vs.push_back(s);
return;
}
for(int j=i;a[j]!='\0';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缺少默认参数() 我不知道如何为我传递的向量提供默认值。 请帮忙
答案 0 :(得分:2)
只要您为一个参数指定了默认值,就必须为以下所有参数指定一个默认值。
所以只需更改参数的顺序:
void permute(char a[], vector<string> &vs,int i=0){
对于vector<string> &
参数,您无法真正传递合理的默认值,而是传递全局引用等。
答案 1 :(得分:0)
只能为函数的最后一组参数指定默认值:
void permute(char a[],int i=0, vector<string> &vs){
这里,为三个参数中的第二个提供默认值。如果为第二个参数提供了默认值,则必须为第三个参数提供一个默认值。具有默认值的参数不能跟没有默认值的参数。
但是,在这种情况下,看起来根本不需要默认值,所以只需将其删除即可。