【笔记】C++的deque容器

前言

C++的deque容器学习笔记
deque容器也称为双端数组
deque的数据结构是首尾都可以插入或删除
deque内部由中控器维护每个缓冲区,在缓冲区中存放元素,所以deque的数据结构并不是连续的内存空间,而是像一个连续的空间
deque访问元素的速度没有vector快

引入头文件

1
#include <deque>

构造

空构造

1
deque<T> d;

拷贝构造

1
deque<T> d(d);

拷贝部分元素

  • [<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;
}
}

赋值

利用运算符重载赋值

1
d = d;

利用assign函数赋值

利用区间的方式赋值

<iterator_start>:开始位置迭代器
<iterator_end>:结束位置迭代器

1
d.assign(<iterator_start>, <iterator_end>);

将多个相同元素赋值

<num>:元素的个数
<element>:需要存放的元素

1
d.assign(<num>, <element>);

容量和大小的操作

判断容器是否为空

1
d.empty();

获取容器中元素的个数

1
d.size();

重新指定容量

  • 如果扩容,会以默认值填充新的位置
  • 如果缩容,末尾的数据会被删除

<num>:新的容量

1
d.resize(<num>);

以指定元素填充新的位置

<element>:填充的元素

1
d.resize(<num>, <element>);

在头部添加数据

1
d.push_front(<element>);

在尾部添加数据

1
d.push_back(<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>);

删除头部的元素

1
d.pop_front();

删除尾部的元素

1
d.pop_back();

删除迭代器指向的元素

  • 返回下一个元素的位置

<iterator>:迭代器

1
d.erase(<iterator>);

删除一组元素

  • 返回下一个元素的位置

<iterator_start>:开始位置迭代器
<iterator_end>:结束位置迭代器

1
d.erase(<iterator_start>, <iterator_end>);

删除容器中所有的元素

1
d.clear();

通过迭代器

<value>:修改后的值

1
*it = <value>;

通过运算符修改指定下标的元素

<index>:需要读写的元素下标
<value>:修改后的值

1
d[<index>] = <value>;

通过at函数修改指定下标的元素

<index>:需要读写的元素下标
<value>:修改后的值

1
d.at(<index>) = <value>;

通过迭代器

1
*it;

获取头部元素

1
d.front();

获取尾部元素

1
d.back();

查询指定位置的元素

通过运算符重载

<index>:需要读写的元素下标

1
d[<index>];

通过at函数

1
d.at(<index>);

排序

  • 默认排序规则是升序

<iterator_start>:开始位置迭代器
<iterator_end>:结束位置迭代器

1
2
3
#include <algorithm>

sort(<iterator_start>, <iterator_end>);

完成

参考文献

哔哩哔哩——黑马程序员