01 std::deque介绍
std::deque是C++标准库中的一个双端队列(double-ended queue)容器。它提供了在队列的前端和后端进行插入和删除操作的效率。
std::deque是一个连续的动态数组,其内部存储了多个连续的元素。
02 初始定义
以下示例分别定义存储不同数据元素的动态数组容器对象。
// 包含头文件。
#include <deque>
// 自定义类。
class MyClass;
// 定义存储int整数双端队列容器对象。
std::deque<int> myDeque1;
// 定义存储float浮点数双端队列容器对象。
std::deque<float> myDeque1;
// 定义存储MyClass类双端队列容器对象。
std::deque<MyClass> myDeque1;
- 通过初始值定义示例:
// 包含头文件。
#include <deque>
// 定义并初始化为:1 3 5 2 4
std::deque<int> myDeque{ 1,3,5,2,4 };
03 添加元素
- 将元素添加到尾部:
push_back()和emplace_back()函数用于将元素添加到容器的尾部。
#include <deque>
std::deque<int> myDeque;
// 将元素添加到尾部示例。
myDeque.push_back(1);
myDeque.push_back(2);
myDeque.emplace_back(3);
- 将元素插入到开头位置:
push_front()和emplace_front()函数用于将元素添加到容器的尾部。
#include <deque>
std::deque<int> myDeque;
// 将元素添加到开头示例。
myDeque.push_front(1);
myDeque.push_front(2);
myDeque.emplace_front(3);
04 删除元素
- 删除尾部元素:
pop_back()函数用于删除容器尾部元素。
// 删除最后元素示例。
myDeque.pop_back();
- 删除开头元素:
pop_front()函数用于删除容器开头元素。
// 删除容器开头元素示例。
myDeque.pop_front();
- 使用迭代器删除指定元素:
示例说明:遍历容器,找出值等于100的元素并删除。
// 遍历容器,找出值等于100的元素并删除。
for (auto iter = myDeque.begin(); iter != myDeque.end(); )
{
const int v = *iter;
if (100 == v)
{
// 删除值为100的元素。
iter = myDeque.erase(iter);
}
else
{
// 迭代器移到下一个元素。
++iter;
}
}
05 访问和修改元素
- 访问和修改开头元素:
front()函数等价于at(0),用于访问容器开头元素。如果容器为空,函数会抛出异常。
// 访问容器开头元素示例。
int v = myDeque.front();
// 修改容器开头元素值示例。
myDeque.front() = 10;
- 访问和修改尾部元素:
back()函数用于访问容器尾部元素。如果容器为空,函数会抛出异常。
// 访问容器尾部元素示例。
int v = myDeque.back();
// 修改容器尾部元素值示例。
myDeque.back() = 20;
- at函数访问和修改指定元素:
at(INDEX)函数用于访问指定INDEX下标位置的元素。如果INDEX下标元素不存在,函数会抛出异常。
// 访问下标0元素示例。
int v1 = myDeque.at(0);
// 访问下标0元素示例。
int v2 = myDeque.at(1);
// 修改下标0元素值示例。
myDeque.at(0) = 100;
// 修改下标1元素值示例。
myDeque.at(1) = 200;
- 通过[INDEX]访问和修改指定位置元素:
[INDEX]等价于at(INDEX)函数,用于访问指定INDEX下标位置的元素。如果INDEX下标元素不存在,访问会报异常。
// 访问下标0元素示例。
int v1 = myDeque[0];
// 访问下标0元素示例。
int v2 = myDeque[1];
// 修改下标0元素值示例。
myDeque[0] = 100;
// 修改下标1元素值示例。
myDeque[1] = 200;
06 遍历元素
#include <deque>
#include <iostream>
// 定义并初始化为:1 3 5 2 4
std::deque<int> myDeque{ 1,3,5,2,4 };
// 遍历容器所有元素示例。
for (int v : myDeque)
{
// 输出 1 3 5 2 4
std::cout << "v = " << v << std::endl;
}
07 元素排序
- 默认排序:
#include <deque>
#include <iostream>
#include <algorithm>
// 定义并初始化为:1 3 5 2 4
std::deque<int> myDeque{ 1,3,5,2,4 };
// 默认排序(升序)示例。
std::sort(myDeque.begin(), myDeque.end());
// 遍历容器所有元素示例。
for (int v : myDeque)
{
// 输出 1 2 3 4 5
std::cout << "v = " << v << std::endl;
}
- 降序排序:
#include <deque>
#include <iostream>
#include <algorithm>
// 定义并初始化为:1 3 5 2 4
std::deque<int> myDeque{ 1,3,5,2,4 };
// 降序排序示例。
std::sort(myDeque.begin(), myDeque.end(), std::greater<int>());
// 遍历容器所有元素示例。
for (int v : myDeque)
{
// 输出 5 4 3 2 1
std::cout << "v = " << v << std::endl;
}
- 使用lambda表达式自定义排序:
#include <algorithm>
// 使用lambda表达式实现降序示例。
std::sort(myDeque.begin(), myDeque.end(), [](int a, int b)
{
return a > b;
}
);
08 附录:完整源码
关注公众号下载本示例完整源码(18_std_deque_example.zip)。
-【End】-
#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。
喜欢本文章,记得点赞、分享、关注哦~