STL :deque的使用方法
作为一种依靠链表实现的容器,deque(读音是不是和‘dick’相同)是一种能够实现元素的快速插入和随机访问的容器类函数。它和vector基本相同(在用法上),但是一个vector没有的==push_front()==造就了它们决定性的不同。
deque的成员函数。
deque<elem> a;创建一个空的deque
deque<Elem> a1(a2) 复制一个deque。
deque<Elem> a(n) 创建一个deque,含有n个数据,数据均已缺省构造产生。
deque<Elem> a(n, elem) 创建一个含有n个elem拷贝的deque
deque<Elem> a(beg,end) 创建一个以[beg;end)区间的deque
a.~deque<Elem>() 销毁所有数据,释放内存
附上代码~
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<deque>
using namespace std;
deque <int> q;
deque <int>::iterator it;
int main()
{
q.push_back(1);
q.push_front(2);
q.push_back(3);
for(int i=0;i<3;i++) //deque也可以提供数组氏的访问和赋值
printf("%-4d",q[i]);
putchar('\n');
it=q.end(); //插入删除操作也和vector一样
it=q.insert(it,4);
q.push_back(5);
it=q.begin() ;
it=q.insert(it,0);
q.push_front(-1);
for(int i=0;i<7;i++)
printf("%-4d",q[i]);
putchar('\n');
return 0;
}
这里还有很多其他的成员函数,用法都和其他的STL函数差不多,就不一一列举了
注意,使用==c.clear()==函数移除元素的时候,并不会清空内存,可能导致内存泄漏,要彻底移除的话需要使用 a.~deque《elem》()
c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。
c.assign(n,elem) 将n个elem的拷贝赋值给c。
c. at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back() 返回容器c的最后一个元素的引用。如果c为空,则该操作未定义。
c.begin() 传回迭代器中的第一个数据地址。
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一位置。
c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。
c.front() 返回容器c的第一个元素的引用。如果c为空,则该操作为空。
get_allocator 使用构造函数返回一个拷贝。
c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置
c.insert(pos,n,elem) 在pos位置插入>n个elem数据。无返回值
c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值
c.max_size() 返回容器c可容纳的最多元素个数。
c.pop_back() 删除最后一个数据。
c.pop_front() 删除头部数据。
c.push_back(elem) 在尾部加入一个数据。
c.push_front(elem) 在头部插入一个数据。
c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素。
c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素的前一个位置。
c.resize(num) 重新指定队列的长度。
c.size() 返回容器中实际数据的个数。
c.swap(c2) 交换容器c和c2中的所有元素。
swap(c1,c2) 交换容器c1和c2中的所有元素,和上一方法相似。
看完了deque的使用方法,下面就来趁热打铁吧