STL之Deque

本文详细介绍了C++容器deque的多种基本使用方式和高级特性,包括赋值、访问、插入、删除、遍历等操作,通过实例演示了如何高效地使用deque容器进行数据管理。
 成员

函数

描述

assign(beg,end)

assign(n,elem)

将[beg; end)区间中的数据赋值给c。

将n个elem的拷贝赋值给c。

c.at(idx)

传回索引idx所指的数据,如果idx越界,抛出out_of_range。

back()

传回最后一个数据,不检查这个数据是否存在。

begin()

传回迭代器重的可一个数据。

clear()

移除容器中所有数据。

deque<Elem> c

deque<Elem> c1(c2)

Deque<Elem> c(n)

Deque<Elem> c(n, elem)

Deque<Elem> c(beg,end)

c.~deque<Elem>()

创建一个空的deque。

复制一个deque。

创建一个deque,含有n个数据,数据均已缺省构造产生。

创建一个含有n个elem拷贝的deque。

创建一个以[beg;end)区间的deque。

销毁所有数据,释放内存。

empty()

判断容器是否为空。

end()

指向迭代器中的最后一个数据地址。

erase(pos)

erase(beg,end)

删除pos位置的数据,传回下一个数据的位置。

删除[beg,end)区间的数据,传回下一个数据的位置。

front()

传回地一个数据。

get_allocator

使用构造函数返回一个拷贝。

insert(pos,elem)

insert(pos,n,elem)

insert(pos,beg,end)

在pos位置插入一个elem拷贝,传回新数据位置。

在pos位置插入n个elem数据。无返回值。

在pos位置插入在[beg,end)区间的数据。无返回值。

max_size()

返回容器中最大数据的数量。

pop_back()

删除最后一个数据。

pop_front()

删除头部数据。

push_back(elem)

在尾部加入一个数据。

push_front(elem)

在头部插入一个数据。

rbegin()

传回一个逆向队列的第一个数据。

rend()

传回一个逆向队列的最后一个数据的下一个位置。

resize(num)

重新指定队列的长度。

size()

返回容器中实际数据的个数。

swap(c2)

Swap(c1,c2)

将c1和c2元素互换。

同上操作。

 

例程:

//  作者:ychw365
//  测试 deque   由于和vector 类似注视简写
#include "stdafx.h"
#include<iostream>   
#include <deque>
using   namespace   std;  
typedef deque<int> INTDEQUE;
INTDEQUE deque1;
INTDEQUE deque2(5,3);
//初始化
void initDeque()
{
	int a[]={0,2,4,6,8,10,12,14};
	deque1.resize(8);
	copy(a,a+8,deque1.begin());

}
//打印
void ShowDeque(INTDEQUE & dequeTemp)
{
	cout<<"元素数量"<< dequeTemp.size()<<endl;
	for(INTDEQUE::iterator dIter=dequeTemp.begin();dIter!=dequeTemp.end();dIter++)
	{
		cout<<*dIter<<" ";

	}
     cout<<endl;
  
}
//构造函数 共7种 msdn  常用前5种
void constructor_test()
{
	INTDEQUE  deque3(4);
	INTDEQUE  deque4(deque2);
	INTDEQUE  deque5(deque1.begin(),deque1.end());
	INTDEQUE   deque6(++deque1.begin(),deque1.end(),deque1.get_allocator());
	INTDEQUE   deque7(3,1,deque1.get_allocator());

	ShowDeque(deque1);
	ShowDeque(deque2);
	ShowDeque(deque3);
	ShowDeque(deque4);
	ShowDeque(deque5);
	ShowDeque(deque6);
	ShowDeque(deque7);   
}
//重新分配数据
void assign_test()
{
	deque1.assign(7,4);
	ShowDeque(deque1);
	deque1.assign(deque2.begin(),deque2.end());
	ShowDeque(deque1);
}
//指定位置 等同于操作符[] 具体和vector相似 2个重载函数
void at_test()
{
	ShowDeque(deque1);
	int &i=deque1.at(0);
	const int &j=deque1.at(1);
	cout<<"第一个"<< i<<endl;
	cout<< "第二个"<<j<<endl;
}
//最后一个元素
void back_test()
{   
	ShowDeque(deque1);
	int &i=deque1.back();
	const int &j=deque1.back();
	cout<<"最后一个"<< i<<"  "<<j<<endl;

}
//第一个元素
void front_test()
{  
	ShowDeque(deque1);
	int &i=deque1.front();
	const int &j=deque1.front();
	cout<<"第一个"<< i<<"  "<<j<<endl;

}
//返回第一个元素位置
void begin_test()
{
	ShowDeque(deque1);
	INTDEQUE::iterator dIter=deque1.begin();
	INTDEQUE::const_iterator constIter =deque1.begin();
	cout<<"第一个"<< *dIter<<"  "<<*constIter<<endl;
}
//返回最后一个元素位置
void end_test()
{
	ShowDeque(deque1);
	INTDEQUE::iterator dIter=deque1.end();
	INTDEQUE::const_iterator constIter =deque1.end();
	cout<<"最后一个"<< *--dIter<<"  "<<*--constIter<<endl;
}

//逆向返回第一个元素位置
void rbegin_test()
{
	ShowDeque(deque1);
	INTDEQUE::reverse_iterator dIter=deque1.rbegin();
	INTDEQUE::const_reverse_iterator constIter =deque1.rbegin();
	cout<<"逆向第一个"<< *dIter<<"  "<<*constIter<<endl;
}
//返回最后一个元素位置
void rend_test()
{
	ShowDeque(deque1);
	INTDEQUE::reverse_iterator dIter=deque1.rend();
	INTDEQUE::const_reverse_iterator constIter =deque1.rend();
	cout<<"逆向最后一个"<< *--dIter<<"  "<<*--constIter<<endl;
}
//清空
void clear_test()
{
	ShowDeque(deque1);
	deque1.clear();
	ShowDeque(deque1);
}
//是否空
void empty_test()
{
	if(!deque1.empty())
	{
		ShowDeque(deque1);
		cout<<"this is not empty"<<endl;
		deque1.clear();

	}
	if(deque1.empty())
	{   ShowDeque(deque1);
		cout<<"this is  empty"<<endl;
	}
	
}
//插入数据 3重载
void  insert_test()
{
   ShowDeque(deque1);
   deque1.insert(deque1.begin(),9);
   ShowDeque(deque1);
   deque1.insert(deque1.begin(),3,1);
   ShowDeque(deque1);
   deque1.insert(deque1.begin(),deque2.begin(),deque2.end());
   ShowDeque(deque1);
}
//删除 2重载
void erase_test()
{ 
	ShowDeque(deque1);
	deque1.erase(deque1.begin());
	ShowDeque(deque1);
	deque1.erase(++deque1.begin(),--deque1.end());
	ShowDeque(deque1);


}

//最大数
void max_size_test()
{
	int i=deque1.max_size();
	cout<<"最大:"<< i<<endl;

}
//删除最后
void pop_back_test()
{ 
   
 ShowDeque(deque1);
 deque1.pop_back();
 ShowDeque(deque1);

}
//删除前面
void pop_front_test()
{
	 ShowDeque(deque1);
     deque1.pop_front();
     ShowDeque(deque1);
  
}
// 在尾部加入一个数据。
 void push_back_test()
 {
   	 ShowDeque(deque1);
	 deque1.push_back(11);
     ShowDeque(deque1);
 }
 //在头部加入数据
 void push_front_test()
 {
	  ShowDeque(deque1);
	 deque1.push_front(11);
     ShowDeque(deque1);

 }
 //元素数
 void size_test()
 {
   ShowDeque(deque1);
   int i=deque1.size();
   cout<<"元素数目"<< i<<endl;
 }
 //重新分配
 void resize_size()
 {
	 ShowDeque(deque1);
	 deque1.resize(20);//不足的元素用0补满
     ShowDeque(deque1);
 }
//交换 2重载
 void swap_test()
 {   
	 ShowDeque(deque1);
	 ShowDeque(deque2);
	 deque1.swap(deque2);
	 cout<<"交换"<<endl;
	  ShowDeque(deque1);
	 ShowDeque(deque2);
	swap(deque1,deque2);
	cout<<"交换"<<endl;
	 ShowDeque(deque1);
	 ShowDeque(deque2);
 }
void main()
{
	initDeque();
	//constructor_test();
	//assign_test();
	//at_test();
	//back_test();
	//front_test();
	//begin_test();
	//end_test();
	//rbegin_test();
	//rend_test();
	//clear_test();
	//empty_test();
	//insert_test();
    //erase_test();
	//max_size_test();
    //pop_back_test();
	//pop_front_test();
	//push_back_test();
	//push_front_test();
	//size_test();
    //resize_size();
	swap_test();
	getchar();

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值