前言
C++的deque容器学习笔记
deque容器也称为双端数组
deque的数据结构是首尾都可以插入或删除
deque内部由中控器维护每个缓冲区,在缓冲区中存放元素,所以deque的数据结构并不是连续的内存空间,而是像一个连续的空间
deque访问元素的速度没有vector快
引入头文件
构造
空构造
拷贝构造
拷贝部分元素
- 将
[<iterator_start>, <iterator_end>)
区间内的元素拷贝
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1
| deque<T> d(<iterator_start>, <iterator_end>);
|
将多个相同元素赋值
<num>
:元素的个数
<element>
:需要存放的元素
1
| deque<T> d(<num>, <element>);
|
迭代器
定义迭代器
第一个元素的位置
1
| deque<T>::iterator it = d.front();
|
最后一个元素的位置
1
| deque<T>::iterator it = d.back();
|
迭代器递增
<step>
:访问的步数
1 2 3 4 5
| it += <step>; it -= <step>;
it++; it--;
|
通过迭代器遍历
1 2 3 4
| for (deque<T>::iterator it = d.begin(); it != d.end(); it++) { cout << *it << endl; }
|
使迭代器只读
- 当一个函数传递的deque是常量时,需要将iterator改为const_iterator
1 2 3 4 5 6 7
| void print(const deque<T> & d) { for (deque<T>::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it << endl; } }
|
赋值
利用运算符重载赋值
利用assign函数赋值
利用区间的方式赋值
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1
| d.assign(<iterator_start>, <iterator_end>);
|
将多个相同元素赋值
<num>
:元素的个数
<element>
:需要存放的元素
1
| d.assign(<num>, <element>);
|
容量和大小的操作
判断容器是否为空
获取容器中元素的个数
重新指定容量
- 如果扩容,会以默认值填充新的位置
- 如果缩容,末尾的数据会被删除
<num>
:新的容量
以指定元素填充新的位置
<element>
:填充的元素
1
| d.resize(<num>, <element>);
|
增
在头部添加数据
1
| d.push_front(<element>);
|
在尾部添加数据
在迭代器指向的位置添加元素
<iterator>
:迭代器
<element>
:元素
1
| d.insert(<iterator>, <element>);
|
添加多个相同的元素
<iterator>
:迭代器
<num>
:插入元素的个数
<element>
:元素
1
| d.insert(<iterator>, <num>, <element>);
|
添加一组元素
- 将其他容器中的一组元素添加到当前元素迭代器指向的位置
<iterator>
:迭代器
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1
| d.insert(<iterator>, <iterator_start>, <iterator_end>);
|
删
删除头部的元素
删除尾部的元素
删除迭代器指向的元素
<iterator>
:迭代器
删除一组元素
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1
| d.erase(<iterator_start>, <iterator_end>);
|
删除容器中所有的元素
改
通过迭代器
<value>
:修改后的值
通过运算符修改指定下标的元素
<index>
:需要读写的元素下标
<value>
:修改后的值
通过at函数修改指定下标的元素
<index>
:需要读写的元素下标
<value>
:修改后的值
1
| d.at(<index>) = <value>;
|
查
通过迭代器
获取头部元素
获取尾部元素
查询指定位置的元素
通过运算符重载
<index>
:需要读写的元素下标
通过at函数
排序
<iterator_start>
:开始位置迭代器
<iterator_end>
:结束位置迭代器
1 2 3
| #include <algorithm>
sort(<iterator_start>, <iterator_end>);
|
完成
参考文献
哔哩哔哩——黑马程序员