数据结构_双端队列(deque)_基础用法

1. 双端队列用法类似于 vector ;

    不同点:deque 对两端都可以操作。

                  vector只能对尾端操作。

2.掌握了双端队列的基本用法,对于 vector、stack_栈、queue_队列的操作只少不多。

deque的基本操作--增删改查

#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<deque>
using namespace std;
int main()
{
	deque<char>s(5,'A');
	deque<char>s2(5,'B');
//重置容器长度
	s2.resize(10,'C');//重置容器元素为 10个,不足的位置用字符 'B'代替 
	s2.resize(3);//重置元素为 3个,多余的删除 
 
//修改 
	s.at(3)='C'; //修改第四个元素 
	char c3=s.at(3);
	cout<<c3<<" \n";
	s2.at(1)='W';
	s2.at(2)='X';
	s2.at(3)='Y';
	s2.at(4)='Z'; 
//以数组下标的形式操作 
	cout<<s2[0]<<","<<s2[1]<<","<<s2[2]<<","<<s2[3]<<","<<s2[4]<<"."<<"\n";
//插入 
	s2.insert(s2.begin()+2,'X');//在容器 s2的第二个位置插入字符 'X' 
	s2.insert(s2.begin()+4,5,'Z');//在容器 s2的第四个位置插入 5 个字符 'Z'
	 s2.insert(s2.begin(),s.begin(),s.end());//在容器 s2的开头插入容器s
	 s2.insert(s2.end(),s.begin(),s.end());//在容器 s2的最后插入容器s
	cout<<s2.size()<<"\n";
//删除 
  s2.erase(s2.begin()+3);//删除第四个元素 
	s2.erase(s2.begin()+1,s2.begin()+4);//删除第 2个到第 4个元素(左闭右开) 
//遍历	
//迭代器正向遍历 
	deque<char>::iterator it;
	for(it=s2.begin();it!=s2.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<"\n";
//迭代器反向遍历
	deque<char>::reverse_iterator it1;
	for(it1=s2.rbegin();it1!=s2.rend();it1++)
	{
		cout<<*it1<<" ";
	 } 
} 

(下面这个有点长,有点乱 ,掌握基本操作后,自己随便写的运行实现):

//万能头文件 #include<bits/stdc++.h> 

#include<cstdio>
#include<iostream>
#include<deque>

using namespace std;
int main()
{
	ios::sync_with_stdio(false);//加快cin,cout的速度
	cin.tie(0);
	 
/*--1--*--*--定义初始化队列_使用赋值操作--*--*--*/ 
	deque<char> str(10,'A');
	deque<char> str1;
	str1=str; 

/*--2 --*--*--定义迭代器,遍历_基础 队列str --*--*--*/ 
	deque<char>::iterator it;
	for(it=str1.begin();it!=str1.end();it++)
	cout<<*it<<"  ";
	cout<<endl;
   /*--*** 增强for用不了 ***--*/
	//for(char tmp : str)
	//cout<<tmp<<" & ";

/*--3--*--*--对容器 判空、清除、获取长度 --*--*--*/ 
	bool idempty=str1.empty();
	if(idempty)
	cout<<"YES"<<endl;
	else
	cout<<"NO"<<endl;
	int temp_len1 =str1.size();
	cout<<temp_len1<<"\n"; 
	str1.clear();
	if(str1.empty())
	cout<<"YES"<<"\n";
	else
	cout<<"NO"<<"\n";

/*-------以下-对容器中的元素--获取--修改--插入--删除--遍历---------------------*/

	/*--1--*--*--数组下标操作符重载 --*--*--*/
		deque<int>d1(10,1);//定义+初始化 
		int i1=d1[1];
		cout<<"i1="<<i1<<endl; 
	/*--1'--*--*--获取和修改容器元素 --*--*--*/
		d1.at(3)=4;
		int i2=d1.at(3);
		cout<<"i2= "<<i2<<"\n";
	
	/*--2--*--*--尾部--插入元素,删除元素 --*--*--*/
	    deque<int>::iterator it1;//定义迭代器,注意迭代器的类型 
	    
		d1.push_back('C');//后进或删除 
		for(it1=d1.begin();it1<d1.begin()+11;it1++)
		cout<<" "<<*it1<<" ";
		cout<<"\n";
		d1.pop_back();
		
	/*--3--*--*--头部--插入元素,删除元素--*--*--*/
		d1.push_front(404);
		d1.push_front(666);
		d1.pop_front();
		for(it1=d1.begin();it1!=d1.end();it1++)
		cout<<" "<<*it1<<" "; 
		d1.push_front('45') ;
		cout<<"\n";
		
	/*--4--*--*--获取--头部和尾部元素 --*--*--*/
		int start1=d1.front();
		int end1=d1.back();
		cout<<"star1= "<<start1<<"\n"<<"end1= "<<end1<<"\n";
		
		
	/*--5--*--*--任意位置--插入、删除元素--*--*--*/
		str1.insert(str1.begin()+4,'x');
		for(it=str1.begin();it!=str1.end();it++)
		cout<<*it<<" ";
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值