将向量传递给函数时,默认参数(如果有)应该是什么?

时间:2016-10-02 15:49:22

标签: c++

我写了这个程序:

#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缺少默认参数() 我不知道如何为我传递的向量提供默认值。 请帮忙

2 个答案:

答案 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){

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

但是,在这种情况下,看起来根本不需要默认值,所以只需将其删除即可。