您的位置:首页 > 产品设计 > UI/UE

STL之deque

2016-06-20 18:04 357 查看
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对象。

成员函数

MemberDescription
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_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 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";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stl deque