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