STL学习记录(五):Deque
2015-05-14 09:26
176 查看
STL顺序容器Deque
Deque简介
Deque其实就是数据结构中的双端队列,与Vector类似它是一个支持随机访问的顺序容器。但是比Deque更强大的是它支持在队头和队尾快速的插入和删除元素。Deque通常以动态数组的形式实现,这保证了元素访问可以在常数时间内完成,并且在队头和队尾的插入和删除也可以在常数时间内完成。但是在中间的插入删除操作则是线性的。元素访问
操作 | 说明 |
---|---|
deq.at(pos) | 返回deq位于pos 的元素的引用,该操作会进行范围检查。 |
deq[pos] | 返回deq位于pos 的元素的引用,不进行边界检查 |
deq.front( ) | 返回deq的第一个元素的引用 |
deq.back( ) | 返回deq的最后一个元素的引用 |
迭代器
操作 | 说明 |
---|---|
deq.begin( ) | 返回deq的第一个元素的迭代器iterator |
deq.end( ) | 返回deq的最后一元素的迭代器iterator |
deq.cbegin( ) | 返回deq的第一个元素的迭代器const_iterator |
deq.cend( ) | 返回deq的最后一个元素的迭代器const_iterator |
deq.rbegin( ) | 返回deq逆序的第一个元素的反向迭代器reverse_iterator |
deq.rend( ) | 返回deq逆序的最后一个元素的反向迭代器reverse_iterator |
deq.crbegin( ) | 返回deq逆序的第一个元素的const型反向迭代器const_reverse_iterator |
deq.crend( ) | 返回deq逆序的最后一个元素的const型反向迭代器const_reverse_iterator |
容量
操作 | 说明 |
---|---|
deq.size( ) | 返回deq里面元素的个数 |
deq.empty( ) | 判断deq是否为空 |
deq.max_size( ) | 返回deq的最大的容量 |
deq.shrink_to_fit( ) | 移除未使用的空间容量(c++11) |
修改类
操作 | 说明 |
---|---|
deq.clear( ) | 删除deq中的所有元素 |
deq.erase(pos) | 删除位于pos的元素 |
deq.erase(beg,end) | 删除位于[beg,end)之间的元素 |
deq.resize(num) | 重置deq的大小,若deq变大则新增元素使用该元素默认构造函数构造 |
deq.resize(num,elem) | 重置deq的大小,若deq变大则新增元素使用elem 的拷贝 |
swap(deq1,deq2) | 交换deq1与deq2 数据 |
deq1.swap(deq2) | 交换deq1与deq中的所有数据 |
deq.assign(n,elem) | 将n个元素elem的拷贝赋值给deq |
deq.assign(beg,end) | 将[beg,end)范围内的元素赋值给deq |
deq.assign({*x1,x2,……}) | 将初始化列表中的所有元素都赋值给deq |
deq.push_back(elem) | 将elem加到deq的末尾 |
deq.push_front(elem) | 将elem加到deq的前面 |
deq.pop_back( ) | 移除deq中的最后一个元素(不是返回该值) |
deq.pop_front( ) | 移除deq中的第一个元素(不是返回该值) |
deq.insert(pos,elem) | 在pos之前插入elem的拷贝并返回该元素的位置 |
deq,insert(pos,n,elem) | 在pos之前插入n个elem的拷贝并返回第一个拷贝的位置(当n==0返回pos |
deq.insert(pos,beg,end) | 将[beg,end)之间的元素插入到pos之前(当beg==end返回pos |
deq.emplace(pos,args…) | 将用参数args…初始化的元素插入到pos之前并返回该元素的位置c++11 |
deq.emplace_back(args…) | 将用参数args…初始化的元素添加到deq的末尾(不返回任何值)c++11 |
deq.insert(pos,{*x1,x2,…}* | 将列表{*x1,x2,…}中所有元素的拷贝插入到*pos之前并返回第一个拷贝的位置(当为空时返回pos)c++11 |
代码实例:
#include <iostream> #include <deque> #include <string> #include <algorithm> #include <iterator> using namespace std; int main() { deque<string> deq; deq.assign(3,string("string")); deq.push_back("last string"); deq.push_front("first string"); copy(deq.cbegin(),deq.cend(),ostream_iterator<string>(cout,"\n")); cout<<endl; deq.pop_front(); deq.pop_back(); for(int i=1;i<deq.size();++i) deq[i] = "another" + deq[i]; deq.resize(4,"resize string"); copy(deq.cbegin(),deq.cend(),ostream_iterator<string>(cout,"\n")); return 0; }
程序的输出:
first string
string
string
string
last string
string
another string
another string
resized string
相关文章推荐
- STL学习记录(五):Deque
- C++ STL之deque学习记录
- STL学习笔记----3.容器 vector 和 deque
- C++ STL学习容器deque深入学习
- STL学习记录(十一):修改类算法
- STL学习笔记之容器--deque(二)源码剖析
- 【C++ STL学习之三】容器deque深入学习
- C++ STL学习笔记三 deque双端队列容器
- STL学习记录(十一):修改类算法
- C++ STL ; 一些记录。自己学习用。
- 20101230学习记录C++ STL
- STL学习记录(十五):Stack
- 【学习笔记】C++高级程序设计:STL:List 和 deque
- STL学习记录(六):List
- STL学习记录(八)Sets、Multisets
- STL中deque,queue,stack,list的学习
- 【C++ STL学习之三】容器deque深入学习
- STL学习笔记----3.容器 vector 和 deque
- C++学习记录之deque容器
- C++ STL学习笔记3--deque