一 、函数的使用
void Fprint(initializer_list<int> list)
{
auto it = list.begin();
for (it; it != list.end(); ++it)
{
std::cout << *it << std::endl;
}
}
引用:Fprint({1,2,3,4,5,6});
结果
二、普通类的使用
class Ct
{
public:
Ct() {}
Ct(initializer_list<int> il)
:v(il)
{}
//(1)(2)两种都可以,选择其一就可以
Ct(initializer_list<std::map<int, int>::value_type> il) //(1)
Ct(initializer_list<std::pair<const int,int>> il) //(2)
:m(il)
{}
std::map< int, int> & getMap()
{
return m;
}
private:
std::vector<int> v;
std::map<int, int> m;
};
int main()
{
Ct m_t = { 1,2,3,4,5 };
//为vector 初始化
Ct m_t2 = { {1,2},{3,4} };
//为map 初始化
for (auto c : m_t2.getMap())
{
cout << c.first<< endl;
}//打印验证
return 0;
}
三、模板类使用
template <class T>
class Ctest
{
public:
Ctest() {}
Ctest(initializer_list<T> il)
:v(il)
{}
//Ctest(initializer_list<std::map<T,T>::value_type > il)这个会报错
//因为value_type 是有模板类推到出来的,所以在模板这样使用时通不过的
Ctest(initializer_list<pair< const T,T> > il)
:m(il)
{}
void v_print()
{
for (auto ct : v)
{
cout << ct << endl;
}
}
void m_print()
{
for (auto ct : m)
{
cout << ct.first<<" "<<ct.second << endl;
}
}
private:
std::vector<T> v;
std::map<T, T> m;
};
int main()
{
Ctest<int> m_ct1 = { 1,2,3,4,5,6,7 };//vector 初始化
m_ct1.v_print();
Ctest<int> m_ct2 = { {1,2},{3,4},{5,6} };//map初始化
m_ct2.m_print();
return 0;
}
四、模板类
template<class T1,class T2>
class CtemplateTest
{
public:
CtemplateTest()
{}
CtemplateTest(initializer_list<T1> il)
:m_v(il)
{}
//CtemplateTest(initializer_list<std::map<T1, T2>::value_type>il) 这个无法运行
CtemplateTest(initializer_list<pair<const T1,T2>> il)
:m_mp(il)
{
//m_mp.insert(il.begin(), il.end()); 如果pair中没有const 则需要insert
}
CtemplateTest(T1 t,T2 m)
:m_key(t),m_value(m)
{}
void v_print()
{
for (auto c : m_v)
{
std::cout << c <<std::endl;
}
}
void m_print()
{
for (auto c : m_mp)
{
std::cout << c.first<<" "<<c.second << std::endl;
}
}
private:
T1 m_key;
T2 m_value;
std::vector<T1> m_v;
std::map<T1, T2> m_mp;
};
int main()
{
//vector初始化
CtemplateTest<string, int> m_clt = { "lili","lucy","tom" };
m_clt.v_print();
CtemplateTest<int, int> m_clt2 = { 1,2,3,4,5 };
m_clt2.v_print();
//map初始化
CtemplateTest<int, string> m_clt3 = { {10,"lili"},{20,"jack"} };
m_clt3.m_print();
map<string, int> _pt;
initializer_list<pair<string,int>> vt = { {"lili",10}, {"lucy",20},{"jack",30} };
_pt.insert(vt.begin(), vt.end());
for (auto c : _pt)
{
cout << c.first << " " << c.second << endl;
}
return 0;
}