STL-deque

// xuanze-sort.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>//vector向量容器
#include<deque>
using namespace std;
/*
================================================= deque介绍= ========================================================

C++ STL容器deque和vector很类似,也是采用动态数组来管理元素。
deque的特点:
(1)、支持随机访问,即支持[]以及at(),但是性能没有vector好。
(2)、可以在内部进行插入和删除操作,但性能不及list。

deque和vector的不同之处:
1、两端都能够快速插入和删除元素。vector只能在尾端进行。
2、deque的元素存取和迭代器操作会稍微慢一些。因为deque的内部结构会多一个间接过程。
3、迭代器是特殊的智能指针,而不是一般指针。它需要在不同的区块之间跳转。
4、deque可以包含更多的元素,其max_size可能更大。因为不止使用一块内存。
5、不支持对容量和内存分配时机的控制。
注意:在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector。因为其内部结构显示不需要复制所有元素。
6、deque的内存区块不再被使用时,会被释放。deque的内存大小是可缩减的。不过,是不是这么做以及怎么做由实作版本定义。

 

*/

/******************************************************************/

int main(int argc, char* argv[])
{
/************************************** 1 ***************************************************/
/*1、创建deque对象*/
deque<int> d;//没有指定大小和初始化
deque<int> d1(10);//长度为10
deque<int> d2(3,0);//大小为10,初始化为0

deque<int>::iterator it;

cout<<"初始化队列:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

/*************************************** 2 **************************************************/
/* 2 插入元素*/
//尾部插入元素,会不断扩张队列
d2.push_back(4);
d2.push_back(3);
d2.push_back(8);

cout<<"尾部插入数据后队列为:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

//头部插入元素,不会扩张队列,只是将原来的元素覆盖
d2.push_front(-1);
d2.push_front(-2);

cout<<"头部插入数据后队列为:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

//中间插入元素,队列会扩张
d2.insert(d2.begin()+1,-100);

cout<<"中间插入数据后队列为:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

/****************************************** 3 ***********************************************/
/*3、 删除元素*/
//尾部删除数据
d2.pop_back();

cout<<"尾部删除数据后队列为:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

//从首部删除数据
d2.pop_front();

cout<<"头部删除数据后队列为:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

//从中间删除数据
d2.erase(d2.begin()+1);

cout<<"中间删除数据后队列为:"<<endl;
for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

d2.erase(d2.begin()+1,d2.begin()+2);

for(it=d2.begin();it!=d2.end();it++)
cout<<*it<<" ";
cout<<endl;

/****************************************** 4 ***********************************************/
/*4、取数据*/
cout<<"取第2个数据:"<<d2[2]<<endl;
cout<<"取第2个数据:"<<d2.at(2)<<endl;

return 0;
}
//ABD##E##CF##G##

posted @ 2016-08-03 19:58  Axel_uestc  阅读(169)  评论(0编辑  收藏  举报