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对象。
成员函数
Member | Description |
template void assign(InIter start,InIter end) | 把由start和end之间给定序列赋值给deque |
void assign(size_type num,const T&val) | 将val中的num个元素赋值给deque |
reference 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,否则返回false |
const_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指定元素之前立即插入val |
void insert(iterator i,size_type num,const T &val) | 在元素i之前插入num个val |
template 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_iterator | const迭代器 |
reverse_iterator | 反向迭代器 |
const_reverse_iterator | const反向迭代器 |
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 string
for (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 q1
deque<char> q2(q1);
cout<<"q2 original contents:\n";
for (i=0;i<q2.size();i++)
{
cout<<q2[i];
}
cout<<"\n\n";
//transpose q2
for (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 q1
q1.insert(p,q2.begin(),q2.end());
cout<<"q1 after insertion:\n";
for (i=0;i<q1.size();i++)
{
cout<<q1[i];
}
cout<<"\n\n";