[关闭]
@songying 2018-12-17T12:58:50.000000Z 字数 1475 阅读 967

STL容器: Deques

STL


特性

  • 采用动态数组管理元素
  • 可随即存取,但存取元素时,deque 内部结构会多一个间接过程,所以元素的存取和迭代器的动作会稍微慢一些

- 可以在头尾两端进行快速插入和删除,且时间复杂度为o(1)

函数操作

1. 构造函数与析沟函数

操作 说明
#inclide <deque> 头文件导入
dequeue<Elem> c 产生一个空deque,其中没有任何元素
deque<Elem> c1(c2) 产生另一个同类型deque的副本(元素拷贝)
deque<Elem> c(n) 利用元素的default 构造函数生成大小为n的 deque
deque<Elem> c(n,elem) 产生一个大小为n的deque, 每个元素值都是elem
deque<Elem> c(beg, end) 产生一个deque, 以区间[begin;end] 作为元素初值
c.~deque<Elem> () 销毁所有元素,并释放内存
c1 = {val1, val2,...} 初始化赋值
c1{val1, val2,...} 初始化赋值

2. 不变操作

函数 说明
c.size() 返回当前的元素数量
c.empty() 判断deque是否为空,等价于size()==0,但可能更快
c.max_size() 返回可容纳的元素最大数量

3. 操作符相关

函数 说明
c1 == c2 判断c1是否等于c2,当且仅当它们元素数量且对应位置上的元素值也相同
c1 != c2
c1 < c2 以字典顺序进行比较
c1 > c2
c1 <= c2
c1 >= c2

4. 赋值操作

函数 说明
c1 = c2 将c2的全部元素赋值给c1
c.assign(n, elem) 将n个elem 赋值给c
c.assign(beg, end) 将区间[beg;end] 内的元素赋值给c
c1.swap(c2) 将c1和c2 的元素互换
swap() 将c1和c2 的元素互换, 此为全局函数

5. 元素存取

函数 说明
c.at(idx) 返回索引idx的元素,若越界,则抛出out_of_range
c[idx] 返回索引idx的元素,不进行范围u检查
c.front() 返回第一个元素,不检查第一个元素是否存在
c.back() 返回最后一个元素,不检查最后一个元素是否存在

6. 迭代器相关函数

函数 说明
c.begin() 返回一个随机存取迭代器,指向第一元素
c.end() 返回一个随机存取迭代器,指向最后元素的下一位置
c.rbegin() 返回一个逆向迭代器,指向逆向迭代的第一元素
c.rend() 返回一个逆向迭代器,指向逆向迭代的最后元素的下一位置

7. 插入,删除操作

函数 说明
c.insert(pos, elem) 在pos位置插入elem, 返回新元素位置
c.insert(pos, n, elem) 在pos位置插入n个elem,无返回值
c.insert(pos, beg, end) 在pos位置插入区间[beg;end]内的所有元素,无返回值
c.push_back(elem) 在尾部添加一个elem
c.pop_back() 移除最后一个元素,无返回值
c.push_front(elem) 在头部添加elem的副本
c.pop_front() 移除头部元素,无返回值
c.erase(pos) 移除pos位置上的元素,返回下一元素位置
c.erase(beg, end) 移除[beg,end]区间内的所有元素,返回下一元素位置
c.resize(num) 将大小(元素个数) 改为num。如果size()增大了,新增元素都以default构造函数产生出来
c.resize(num, elem) 将元素个数改为num,如果size()增大了,新增元素都是elem的副本
c.clear() 移除所有元素,将容器清空
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注