STL入门Day2

一、deque介绍
deque 是 double-ended queue 的缩写,又称双端队列
使用deque要包括头文件:

#include <deque>

一些创建、插入、删除的基本操作代码

#include <iostream>
#include <deque>
#include<algorithm>
using namespace std;
int main(){
	//deque的创建操作和vector别无二致
	//创建空的deque 
	deque<int> d;
	deque<int>::iterator i;
	//插入元素
	for(int j=0;j<10;j++){
		d.push_back(j);
	}
	//deque是双端队列,因此可以在头部插入元素
	d.push_front(66);
	// deque是双端队列,同理,可以在头部弹出元素
	d.pop_front();
	//弹出尾部元素
	d.pop_back(); 
	//迭代器输出deque元素 
	for(i=d.begin();i<d.end();i++){
		cout<<*i<<" "; 
	}
	
	return 0;
}

二、deque的迭代器操作
正向遍历

for(auto i=d.begin();i<d.end();i++){
		cout<<*i<<" "; 
	}
//运行结果:0 1 2 3 4 5 6 7 8 9

反向遍历
使用rbegin()和rend()两个函数,分别指向最后一个元素和第一个元素的前一个元素,其中++操作是往左移,–操作是往右移动

for(auto i=d.rbegin();i<d.rend();i++){
		cout<<*i<<" "; 
	}
//运行结果:9 8 7 6 5 4 3 2 1 0

三、deque访问元素和insert()操作

#include <iostream>
#include <deque>
#include<algorithm>
using namespace std;
int main(){
	deque<int> d;
	auto i=d.rbegin();
	for(int j=0;j<10;j++){
		d.push_back(j);
	}
	//1、使用迭代器访问deque 
	for(auto i=d.begin();i<d.end();i++){
		cout<<*i<<" "; 
	}
	//2、使用下标随机访问
	cout<<"使用下标随机访问:"<<d[2]<<endl; 
	//3、使用at()检查越界访问,越界,报错 
	cout<<"使用at()检查越界访问"<<d.at(4)<<endl;
	//4、使用front()、end()访问元素
	cout<<"使用front()"<<d.front()<<endl;
	cout<<"使用back()、"<<d.back()<<endl;
	
	//插入元素操作insert()
	//1、指定位置插入指定元素 
	d.insert(d.begin()+1,44);
	//2、指定位置插入n个指定值
	d.insert(d.begin()+1,2,88);
	//3、插入另一迭代器一定范围内的值
	vector<int> num;
	for(int i=0;i<5;i++){
		num.push_back(i);
	}
	d.insert(d.begin()+3,num.begin(),num.end());
	for(auto i=d.begin();i<d.end();i++){
		cout<<*i<<" "; 
	} 
	return 0;
}

五、注意事项
deque被创建之后,已添加元素并创建了迭代器auto i = deque.begin()之后,若继续添加元素,也许会产生原来的deque位置内存不足,因此需要将原deque移动或复制到新的地址空间(原来的地址空间会被释放),所以此时原i迭代器将失效(deque首地址变了),因此每一次为deque添加新元素之后,都应该重新获取其迭代器,否则将导致程序崩溃。

四、遇到的问题
在使用auto声明变量类型的时候出现以下错误:
在这里插入图片描述
后来搜了一下问题原因,auto声明是在c++11的标准中添加的,所以要修改IDE的编译器选项,DEV c++的解决办法如下:
在这里插入图片描述
参考学习链接:http://c.biancheng.net/view/6866.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值