c++ STL 之 deque

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013919153/article/details/82387459

#define VNAME(value) {cout<<(#value)<<":"<<endl;}

template<class T>
void print_elemnt(T &v)
{
	for(auto i : v)
		cout<<i<<" ";
	cout<<endl;
}

/************************************************************************/
/* 简介:
 * deque是集vector和list集合的优点,访问速度快,首尾插入速度快,因此,操作类似
 * 但是也有缺点,中间插入巨慢,因为和它的底层数据结构有关,多个块连接起来的。
/************************************************************************/
void test_deque()
{
	deque<int> a;
	deque<int> b(4);	//分配4个数据,默认值为0
	deque<int> c(4,5);	//分配4个5
	deque<int> d(c.begin(),c.begin()+3);	//区间构造
	deque<int> e(b);	//拷贝构造
	deque<int> h;
	a = c;	

	/*
	迭代器:begin,end,rbegin,rend及对应的const
	 */
	
	cout<<" size of a is :"<<a.size()<<endl;
	cout<<" max_size of a is :"<<a.max_size()<<endl;
	cout<<" first element is :"<<a.front()<<endl;
	cout<<" first element is :"<<a[0]<<endl;
	cout<<" first element is :"<<a.at(0)<<endl;
	cout<<" last element is :"<<a.back()<<endl;
	
	//a.resize(n,val);
	//a.shrink_to_fit();
	//a.assign(n,val);		//赋值n个val给a
	//a.assign(c.begin(),c.begin()+2);

	b.push_back(9);
	b.push_front(1);
	b.pop_back();
	b.pop_front();

	auto npos = c.begin();
	//c.insert(npos,6);		//在npos位置插入6,插入之后注意迭代器失效问题
	c.insert(npos,3,6);	//在npos位置插入3个6 
	//c.insert(npos,d.begin(),d.begin()+2);

	auto ipos = c.begin();
	c.emplace(ipos,1,2,3);	//emplace参数可变

	VNAME(h);
	print_elemnt(h);
	h.emplace_front(34);
	h.emplace_back(65,45);
	print_elemnt(h);
	/*
	*emplace() 和 insert()
	*前者可以插入多个数据,省去多次构造临时变量;后者插入数据的副本
	 */

	auto jpos = a.begin();
	a.erase(jpos);	//删除一个或者一段区间[,),返回指向下一个元素的迭代器,遍历时不要弄错了

	a.swap(b);	//交换数据
	a.clear();	//清空数据
	if(a.empty())
	{
		cout<<"a is empty"<<endl;
	}

	VNAME(a);
	print_elemnt(a);
	VNAME(b);
	print_elemnt(b);
	VNAME(c);
	print_elemnt(c);
	VNAME(d);
	print_elemnt(d);
	VNAME(e);
	print_elemnt(e);

	cout<<endl<<endl;
}

猜你喜欢

转载自blog.csdn.net/u013919153/article/details/82387459