STL之deque

来源:互联网 发布:apache tiles3 教程 编辑:程序博客网 时间:2024/05/16 13:48

deque是双向队列
头文件是

    #include <deque>

1.deque的基础

构造函数

template< class T, class Allocator = allocator>class deque
T是存储数据类型,Allocator指定分配器(默认是标准分配器)。

deque的构造函数:

explicit deque(const Allocator &a = Allocator());

构造空的deque

explicit deque(size_type num,const T &val = T(),const Allocator &a=allocator());

构造一个有num个元素,值为val的deque

deque(const deque< T, Allocator> &ob);

构造包含有和ob一样元素的deque,这是deque的拷贝构造函数

template < class InIter>deque(InIter start InIter end,const Allocator &a=Allocator());

构造包含由start和end指定范围元素的deque。

其他

deque定义了赋值运算符和比较运算符:
==,<,<=,!=,>,>=

deque支持随机访问迭代器,也支持通过[]方式像数组一样进行索引访问deque对象。

成员函数

MemberDescriptiontemplate void assign(InIter start,InIter end)把由start和end之间给定序列赋值给dequevoid assign(size_type num,const T&val)将val中的num个元素赋值给dequereference at(size_type i);
const_reference at(size_type i)const返回由i指定的指定元素的引用reference back();
const_reference back() const返回deque中最后元素的引用iterator begin();
const_iterator begin() const返回deque中指向第一个元素的迭代器void clear()删除deque中的所有元素bool empty() const如果调用的deque为空返回true,否则返回falseconst_iterator end() const;
iterator end()返回deque中结束位置的迭代器iterator erase(iterator i)删除由i指定的元素,返回的迭代器起始位置是被删除元素之后的第一个元素位置iterator erase(iterator start,iterator end)删除由start和end指定范围内的元素。返回的迭代器起始位置是最后被删除元素在deque中之后的第一个元素的位置reference front();
const_reference front() const返回deque中第一个元素的引用allocator_type get_allocator()const返回deque的分配器iterator insert(iterator i, const T &val)在由i指定元素之前立即插入valvoid insert(iterator i,size_type num,const T &val)在元素i之前插入num个valtemplate void insert(iterator i,InIter start,InIter end);在元素i之前插入由start和end指定的序列size_type max_size() const返回deque能保存的最大元素个数reference operator[](size_type i);
const_reference operator[](size_type i) const返回第i个元素的引用void pop_back()删除deque中的最后一个元素void pop_front()删除deque中的第一个元素void push_back(const T &val)将值为val的元素加入到deque尾部void push_front(const T &val)将值为val的元素加入到deque头部reverse_iterator rbegin();
const_reverse_iterator rbegin() const;返回反向迭代器指向deque尾部reverse_iterator rend();
const_reverse_iterator rend() const返回反向迭代器指向deque头部void resize(size_type num, T val = T())该表deque的大小为num。如果deque必须要增加长度,则由val指定的值作为新元素被加到deque的尾部size_type size() const返回deque中当前元素个数void swap(deque

具体类型

size_type整数类型difference_type能够区分两个地址不同的整数类型reference元素的引用(T&)const_reference元素的常量引用(const T&)iterator迭代器const_iteratorconst迭代器reverse_iterator反向迭代器const_reverse_iteratorconst反向迭代器value_type存储在容器中值的类型(T)allocator_type分配器类型pointer指向元素的指针const_pointer指向元素的常量指针(const T*)

2.Example

deque<char> q1;char str[] = "Using a deque.";int i =0;for (i=0;str[i];i++){    q1.push_back(str[i]);    q1.push_front(str[i]);}cout<<"Original q1:\n";for (i=0;i<q1.size();i++){    cout<<q1[i];}cout<<"\n\n";//remove backward stringfor (i=0;i<strlen(str);i++){    q1.pop_front();}cout<<"q1 after popping front:\n";for (i=0;i<q1.size();i++){    cout<<q1[i];}cout<<"\n\n";//construct a copy of q1deque<char> q2(q1);cout<<"q2 original contents:\n";for (i=0;i<q2.size();i++){    cout<<q2[i];}cout<<"\n\n";//transpose q2for (i=0;i<q2.size();i++){    q2[i] = q2[i] + 1;}cout<<"q2 transposed contents:\n";for (i=0;i<q2.size();i++){    cout<<q2[i];}cout<<"\n\n";//get iterator to first occurrence of 'a'deque<char>::iterator p = q1.begin();while (p!=q1.end()){    if (*p == 'a')    {        break;    }    p++;}//insert transposed q2 into q1q1.insert(p,q2.begin(),q2.end());cout<<"q1 after insertion:\n";for (i=0;i<q1.size();i++){    cout<<q1[i];}cout<<"\n\n";
0 0
原创粉丝点击