C++STL容器篇deque

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() 移除所有元素,将容器清空

以上为自己阅读书籍和翻阅资料的一些整理和自己的理解,由于自身水平有限,若有错误,欢迎大家指出。

原创文章 23 获赞 1 访问量 373

猜你喜欢

转载自blog.csdn.net/weixin_44806268/article/details/105324715