initiater_list 作为C++11提供的一种可变参数的方法,有如下特点:
1、initiater_list 是一个模板类型,与其他模板类型不同的是,initiater_list 对象中的元素永远是常量,无法改变
2、使用 initiater_list 实现可变参数时,参数的类型必须相同,类似于数组(至于不同类型的情况,参照其他文章)
3、常见使用方法
initiater_list<T> lst | 默认初始化:T类型元素的空列表 |
initiater_list<T> lst{a,b,c...} | lst的元素常量和初始值一样多 lst的元素是对应初始值的副本 列表中的元素的const |
lst2(lst)
lst2 = lst | 拷贝或赋值一个initializer_list对象不会拷贝列表中的元素;拷贝后,原始列表和副本共享元素
|
lst.size() | 列表中的元素数量 |
lst.begin() | 返回指向 lst 中首元素的指针 |
lst.end() | 返回指向 lst 中尾元素下一位置的指针 |
示例代码:
#include <iostream>
using namespace std;
int getSum( initializer_list<int> lInt )
{
int sum = 0;
for( auto i = lInt.begin(); i != lInt.end(); ++i )
{
sum += *i;
}
return sum;
}
int getSum( char ch, initializer_list<string> sl )
{
int sum = 0;
switch( ch )
{
case 'a':
{
for( auto i : sl )
{
sum += i.size();
}
}
break;
case 's':
{
for( auto i : sl )
{
if( sum <= i.size() )
{
sum = i.size();
}
}
}
break;
default:
break;
}
return sum;
}
//by zhaocl
int main()
{
cout << getSum( { 1, 2, 3 } ) << endl;
cout << getSum( 'a', { "biu1", "biu2" } ) << endl;
cout << getSum( 's', { "biu1", "biu1biu2" } ) << endl;;
system( "pause" );
return 0;
}