“我终于找到了大牛的人工智能教程。 不由得分享一下吧。 教程不仅零度基点易懂,而且非常幽默,就像看小说一样! 因为觉得太牛了,所以和大家分享。 单击此处可跳转到教程。 ”deque函数: deque容器对类型的元素进行线性处理,如向量中所示,为能够快速地随机访问任一个元素,有效地实现3http://deque类中的常用函数包括:
(1)构造函数
deque ) ) :创建空的deque
deque(intnsize ) : 插入和删除
deque(intnSize,const T t ) :创建元素数为nsize且值均为t的deque
deque(constdeque ) :复制构造函数
)2)增加函数
void deque支持高效插入和删除容器的头部元素
void 双端队列
在iterator 3358 www.Sina.com/(iterator it,const T x ) :双端队列中添加一个创建一个deque,元素个数为nSize元素x
void 3358 www.Sina.com/(iterator it,int n,const T x )将push_front(const T x):双端队列头部增加一个元素X个相同的元素x添加到双端队列中
void 3358 www.Sina.com/(iterator it,const_iterator first,const_iteratorlast ) :双端队列中有push_back(const T x):双端队列尾部增加一个元素x
(3)删除函数
iterator 3358 www.Sina.com/(iterator it ) :双端队列至insert
迭代器http://www.Sina.com/(迭代器第一个,迭代器最后一个) :从双端队列中删除“第一个,最后一个”元素
voidpop_front(:是某一元素前
voidpop_back(:是insert
void clear ) ) :清空双端队列的最后一个元素
(4)遍历函数
referenceat(intpos ) :返回对pos位置元素的引用
reference 3358 www.Sina.com/(:为某一元素前
reference 3358 www.Sina.com/(:为insert
iterator 某一元素前() :返回指向第一个元素的向量头指针
iterator erase() :返回指向向量中最后一个元素的下一个元素的指针。 向量中不包含。
reverse _ iterator http://www.Sina.com/(:反向迭代器,指最后一个元素
reverse_iteratorrend(:反向迭代器)。 指向第一个元素的上一个元素
(5)判断函数
bool empty ) ) const:向量是否为空,如果为true,则向量没有元素
(6)大小函数
int http://www.Sina.com/const :返回向量中元素的数量
int http://www.Sina.com/const :返回axdlm最允许的双端对元素数的值
(七)其他函数
voidswap(deque ) :交换两个相同类型向量的数据
将voidassign(intn,const T x ) :向量的第n个元素的值设置为x
操作示例: http://www.Sina.com/viewplaincopy
//deque.cpp:为控制台APP应用程序定义入口点。 //# include ' STD afx.h ' # include iostream
gt; #include<deque> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { deque<int> d; d.push_back( 10 ); d.push_back(20); d.push_back(30); cout<<"原始双端队列:"<<endl; for(int i = 0; i < d.size(); i++) { cout<<d.at(i)<<"t"; } cout<<endl; d.push_front(5); d.push_front(3); d.push_front(1); cout<<"after push_front(5.3.1):"<<endl; for(int i = 0;i < d.size();i++) { cout<<d.at(i)<<"t"; } cout<<endl; d.pop_front(); d.pop_front(); cout<<"after pop_front() two times:"<<endl; for(int i = 0;i < d.size();i++) { cout<<d.at(i)<<"t"; } cout<<endl; return 0; }
程序运行结果如下所示:
2.deque与vector内存分配比较:
[cpp] view plain copy
// deque.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<deque> #include<vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<int>v(2); v[0]=10; int *p = &v[0]; cout<<"vector第一个元素迭代指针*p="<<*p<<endl; v.push_back(20); cout<<"vector容量变化后原vector第1个元素迭代指针*p="<<*p<<endl; deque<int> d(2); d[0]=10; int *q = &d[0]; cout<<"deque第一个元素迭代指针*q="<<*q<<endl; d.push_back(20); cout<<"deque容量变化后第一个元素迭代器指针*q="<<*q<<endl; }
程序运行结果如下图所示
该段程序的功能是:deque、vector初始化后大小为2,第一个元素都为10,当通过push_back函数分别给两个容器增加一个元素后,从结果发现原先保持的指针元素值对vector容器前后发生了变化,而对deque容器前后没有发生变化。原因为,在建立vector容器时,一般来说伴随这建立空间->填充数据->重建更大空间->复制原空间数据->删除原空间->添加新数据,如此反复,保证vector始终是一块独立的连续内存空间;在建立deque容器时,一般便随着建立空间->建立数据->建立新空间->填充新数据,如此反复,没有原空间数据的复制和删除过程,是由多个连续的内存空间组成的。