deque的特点: 两端都能快速安插元素和移除元素,对外表现为两端可自由扩展的动态数组,使用时需包含头文件deque,打开std命名空间。
deque的迭代器: random access iterator(随机存取迭代器)
deque存储方式和增长方式: 用一个vector做控制中心,放入指向每个buffer的指针,每个buffer含有4个迭代器控制其内部与外部vector连接。内部实现较为复杂,详情细节了解可以参考侯捷老师讲解deque内部实现
deque的常用定义方式:
//deque的型别
template<class T,class Allocator=allocator<T>>
class deque;
//如上,一般我们定义时只需指定第一模板参数用来表明元素类型,第二参数为memory model
自带默认值
deque<T>c; //产生一个空的deque
deque<T>c1(c2); //将同型c2的副本全部拷贝
deque<T>c(n); //产生一个deque,含n个元素,元素值取决于构造函数默认值
deque<T>c(n,t); //效果同上,t为定义的默认值
deque<T>c(iterator1, iterator2); //产生一个deque
以迭代器[iterator1,iterator2)区间的元素为初值
deque<int>c2 = {1,2,3,4,5}; //列表初始化方式
c.~deque<T>() //销毁所有元素,释放内存
不同于vector,deque并不提供容量函数操作( capacity()和reserve() )
常用关于容器容量的函数 | 功能 |
---|---|
c.size() | 返回容器元素个数 |
c.empty() | 判断容器是否为空 |
赋值交换操作函数 | 功能 |
---|---|
c.assign(n,elem) | 将n个elem副本赋值给c |
c.assign(iterator1,iterator2) | 将区间[iterator1,iterator2)的元素赋值给c |
c1.swap(c2) | 将同型的c1,c2的元素交换,并交换两者的size |
swap(c1,c2) | 功能同上,但效率不如上版本,该版本为泛化版 |
元素的存取函数 | 功能 |
---|---|
c.at(idx) | 返回idx索引的元素。如果idx越界,抛出out_of_range |
c[idx] | 返回idx索引的元素,但不进行范围检查 |
c.front() | 返回第一个元素。但不检查元素是否存在 |
c.back() | 返回最后一个元素。但不检查元素是否存在 |
所以在调用下标索引时,你必须心里有数,确实有效,调用front()和back()时,应调用empty()判断容器是否为空。
deque的迭代器函数 | 功能 |
---|---|
c.begin() | 返回一个随机迭代器,指向第一个元素 |
c.end() | 返回一个随机迭代器,指向最后一个元素的下一位置 |
c.rbegin() | 返回一个逆向迭代器。指向逆向迭代的第一个元素 |
c.rend() | 返回一个逆向迭代器,指向逆向迭代的最后一个元素的下一位置 |
deque的安插、移除操作 | 功能 |
---|---|
c.insert(iterator,elem) | 在iiterator指向的位置前插入一个elem,并返回指向elem的迭代器 |
c.insert(iterator,n,elem) | 在iterator指向的位置前插入n个elem,并返回指向(iterator-n)位置的迭代器 |
c.insert(iterator1,iterator2,iterator3) | 在iterator1的位置前插入[iterator2,iterator3)区间的元素,返回指向(iterator1-n)位置的迭代器,n为插入元素的个数 |
c.push_back(elem) | 在尾部添加一个elem的副本 |
c.pop_back() | 移除尾部元素 |
c.push_front(elem) | 在头部添加一个elem的副本 |
c.pop_front() | 移除头部元素 |
c.erase(iterator) | 移除iterator指向的元素,并返回指向移除元素的下一元素的迭代器 |
c.erase(iterator1,iterator2) | 删除[iterator1,iterator2)区间的元素,返回迭代器iterator2 |
c.resize(num) | 将容器内元素数量改为num个,若num<size 则移除多余元素,num>size 增添元素,元素值由构造函数默认值决定 |
c.resize(num,elem) | 功能同上,elem为num>size 增添元素的默认值 |
c.clear() | 移除所有元素,将容器清空 |
以上为自己阅读书籍和翻阅资料的一些整理和自己的理解,由于自身水平有限,若有错误,欢迎大家指出。