STL容器之Deque-《C++标准库(第二版)》读书笔记
写在前面:本文是阅读《C++标准库(第二版)》的读书笔记。
文章目录
- 7.4 Deque
- 7.4.1 Deque的能力
- 7.4.2 Deque的操作函数
- 7.4.3 Exception Handling
- 7.4.4 Deque运用实例
7.4 Deque
容器deque(发音为“deck”)和vector非常相似。它也采用dynamic array来管理元素,提供随机访问,并有着和vector几乎一模一样的接口。不同的是deque的dynamic array头和尾都开放,因此能在头尾两端进行快速安插和删除。
为了提供这种能力,deque通常实现为一组独立区块(a bunch of individual blocks) ,第一区块朝向某方向扩展,最后的区块朝另一方向扩展。
使用deque之间,必须先包含头文件< deque> :#include< deque>
其中,deque类型定义于命名空间std内的一个 class template:
和vector相同,这里的第一个template参数用来指明元素类型,第二个template实参可有可无,用来指定内存模型(memory model),默认为allocator.
7.4.1 Deque的能力
Deque和vector相比,功能上的差异如下:
Deque的的以下特性和vector差不多:
总之,以下情形最好使用deque:
- 你需要在两端安插和删除元素(这是deque的拿手好戏)。
- 无需指向容器内的元素。
- 要求”不再使用的元素必须释放“(不过,C++ standard 对此无任何保证)。
7.4.2 Deque的操作函数
下面列出了deque的操作函数。
deque的各项操作只有以下两点和vector不同:
其他操作都相同。
请注意,C++11 添加了 shrink_to_fit() ,那是个不具有强制力(nonbinding)的函数,负责缩小内部内存以匹配元素个数。你可能会认为shrink_to_fit()对deque没意义,因为deque本来就会释放不再使用的区块内存。然而,deque内部用来存放”指向独立区块“的所有pointer的空间,通常不会被缩小,如果用了这个函数就有可能真的被缩小。
还有一些值得考虑的事情:
7.4.3 Exception Handling
原则上deque提供的异常处理和vector提供的一样。新增的操作函数push_front()和pop_front()分别对应于push_back()和pop_back()。因此C++标准库保证下列行为:
如果以push_back() 、 push_front()安插元素时发生异常,则该操作不带来任何效应。
pop_back()和 pop_front() 不会抛出任何异常。
7.4.4 Deque运用实例
#include<iostream> #include<deque> #include<iterator> #include<algorithm> #include<string> using namespace std;int main(){//create empty deque of stringsdeque<string> coll;//insert several elementscoll.assign(3,string("string"));//复制3个 ”string“ ,赋值给coll coll.push_back("last string") ; //尾部添加一个字符串 coll.push_front("first string"); //头部添加一个字符串 //print elements separated by newlinescopy( coll.cbegin(),coll.cend(),ostream_iterator<string>(cout,"\n"));cout<<endl;//remove first and last elementcoll.pop_back();coll.pop_front();//insert "another" into every element but the firstfor(int i=1; i<coll.size();i++)coll[i]="another"+coll[i];// change size to four elementscoll.resize(4,"resized string"); //将元素数量改为4,如果size()变大,多出来的新元素都是”resized string“的拷贝 //print elements separated by newlinescopy( coll.cbegin(),coll.cend(),ostream_iterator<string>(cout,"\n"));cout<<endl;}输出结果
总结
以上是生活随笔为你收集整理的STL容器之Deque-《C++标准库(第二版)》读书笔记的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Leetcode1695. 删除子数组的
- 下一篇: Leetcode1696. 跳跃游戏 V