标签:
// 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##
标签:
原文地址:http://www.cnblogs.com/Axel-uestc/p/5734240.html