将vector传递给函数时,默认实参(如果有的话)应该是什么?



我写了这个程序:

#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){

这里,为三个参数中的第二个参数提供了默认值。如果为第二个参数提供了默认值,则必须为第三个参数也提供默认值。有默认值的形参不能后跟没有默认值的形参。

然而,在这种情况下,看起来默认值根本不需要,所以只需删除它

相关内容

最新更新