c/c++ 可变数量参数 参数包
c++11 参数包
c++11 有参数包,但是写的时候需要递归,写递归的终止函数
比如说,写了一个函数
template<class...Args>
string add_str(string a, Args...args)
{
return a+add_str(args...);
}
还需要写他的终止函数只有有一个参数,或者无参数
1 只有一个参数:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
using namespace std;
string add_str(string a)
{
return a;
}
template<class...Args>
string add_str(string a, Args...args)
{
return a + add_str(args...);
}
int main()
{
string a = "1";
string b = "2";
string c = "3";
string d = "4";
string ans = add_str(a, b, c, d);
cout << ans << endl;
return 0;
}
2 无参数:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
using namespace std;
string add_str()
{
return "";
}
template<class...Args>
string add_str(string a, Args...args)
{
return a + add_str(args...);
}
int main()
{
string a = "1";
string b = "2";
string c = "3";
string d = "4";
string ans = add_str(a, b, c, d);
cout << ans << endl;
return 0;
}
c98 可变个数参数
另外一种是c的stdarg.h中的可变数量参数的方法
这种方法的缺点是你无法隐式的知道要处理多少个参数,你需要显示的指出来,你传的可变数量的参数有多少个,或者碰到什么样的就结束。
但是main函数也没给出有几个参数啊,他是怎么知道的??? 这个是怎么实现的。。。不晓得
int main(int argc, char **argv)
1 直接给出多少个
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <stdarg.h>
using namespace std;
string add_str(int n, ...)
{
string s = "";
va_list ap;
va_start(ap, n);
for (int i = 0; i < n; i++)
{
s += va_arg(ap, char*);
}
va_end(ap);
return s;
}
int main()
{
string a = "1";
string b = "2";
string c = "3";
string d = "4";
string ans = add_str(4, a.c_str(), b.c_str(), c.c_str(), d.c_str());
cout << ans << endl;
return 0;
}
2 以特殊字符结束
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <stdarg.h>
using namespace std;
string add_str(const char *a, ...)
{
string s = a;
va_list ap;
va_start(ap, a);
char *t= va_arg(ap, char*);
while(strcmp(t, "")!=0)
{
s += t;
t = va_arg(ap, char*);
}
va_end(ap);
return s;
}
int main()
{
string a = "1";
string b = "2";
string c = "3";
string d = "4";
string ans = add_str(a.c_str(), b.c_str(), c.c_str(), d.c_str(), "");
cout << ans << endl;
return 0;
}