initializer_list使用

一 、函数的使用

	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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值