⭐️STL⭐️之deque,stack,queue全解,❤️算法必备❤️<中>

简介: ⭐️STL⭐️之deque,stack,queue全解,❤️算法必备❤️<中>

前言

STL有点多,码神分为了,上中下,三个部分来讲解😁,接下来我们看中,
此类分为三个小部分:
👍deque
👍stack
👍queue

一、deque

对于deque容器来说,一般将其称之为双端数组,与上章的vector不同,vector是只允许在尾端插入,而deque是双端插入,如果说的浪漫一点,就是双向奔赴,但是,vector的访问速度比deque快,而vector头部的插入和删除比deque慢

用图来表示deque就是这样的
在这里插入图片描述
从上图我们,不难看出相较于vector,多了push_front, pop_front,front,back……等函数

工作原理如下:
在这里插入图片描述
可以看出deque内部有一个中控区,维护每段缓冲区的内容,缓冲区中存放真实的数据,中控区维护的是每个缓冲区的地址,使得deque像一块连续的空间😂
同样deque的迭代器也是支持随机访问的,
实际使用起来也和vector大同小异,我们来看代码

#include<deque>
#include<iostream>
using namespace std;
void print(const deque<int> &d)//只读的迭代器
{
    for (deque<int> ::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void test01()
{
    deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    print(d1);
}
int main()
{
    test01();
    return 0;
}

赋值我就不一一写了,可以参考上一个博客,
也与vector类似,,有重载“ = ”,operator =,
例如:d2=d1
d1.assign(d2.begin(),d2.end())
d3.assign(10,100)

依据vector的程序,接下来应该是deque的大小操作
比如:
💕deque的empty判断是否为空,还有size返回大小,resize重新定义大小
区别就是:没有容量,只有大小,这点我在vector中也介绍过了,就是没有
capacity
然后就是插入和删除操作
这里由于deque是双向操作,所以比vector多了个pop的操作,所以我就用代码,单独写一下pop的操作

#include<deque>
#include<iostream>
using namespace std;
void print(const deque<int> &d)//只读的迭代器
{
    for (deque<int> ::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void test01()
{
    deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    print(d1);
    d1.pop_back();//尾删
    print(d1);
    d1.pop_front();//头删
    print(d1);
}
int main()
{
    test01();
    return 0;
}

访问元素,和vector一样吧,
d1.at(0),d1【i】,所以说除了迭代器外,还有这俩种方法👍

再来说一个algorithm中的算法,sort排序算法,还是用deque讲,开始吧

#include<algorithm>
sort(d.begin(),d.end());//默认从小到大
//可以使用倒序来,变为从大到小

stack栈

不知道大家有没有看过的数据结构,首先栈是一个先入后出的数据类型,进栈,和出栈,分别为push,和pop
在这里插入图片描述
由于栈有栈顶,所以又多了个top,整体下来就先入后出
注意:栈不允许有遍历的行为,只有栈顶元素才能被外界访问到

  • size:记录大小,可以在入栈的操作记录
  • empty:记录是否为空,为空返回真
  • push:栈顶加入
  • top:弹出

简单来实现一下,光说不练假把式

#include<iostream>
#include<stack>
using namespace std;
void test01()
{
    stack<int> s;
    s.push(10);
    s.push(20);
    s.push(30);
    while (!s.empty())
    {
        s.pop();
    }
    cout << s.size();

}
int main()
{
    test01();
    return 0;
}

请添加图片描述

还是和我在数据结构中所讲,栈更像一个弹夹,入子弹,和打出子弹
栈大概就这么多了,欢迎关注!

queue

队列,还有映像没有了,可以看看码神爆肝5w字数据结构,区别于栈,队列是一个先进先出的数据结构
请添加图片描述
由于队列,只有队头和对尾能被外界访问,所以它也不允许遍历(不允许改动的记录),大体函数有一下这些:

  • push—入队
  • pop—出队
  • size—大小
  • back—返回最后一个元素
  • front—返回第一个元素
  • empty—判断是否为空,为空返回真

简单实现一下,这些接口:

#include<queue>
#include<iostream>
using namespace std;
//不允许遍历
void test01()
{
    queue<int> q;
    q.push(10);
    q.push(20);
    cout << q.front ()<<" ";
    cout << q.back() << " ";

    q.pop();
    while (!q.empty())
    {
        cout << q.front();
        break;
        //不然是死循环
    }
        
}
int main()
{
    test01();
    return 0;
}

总结

大概中篇就这么多吧,记住有的容器是不允许遍历的,stack,queue等,还是老样子,原创不易,欢迎三连,感谢各位!

相关文章
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
51 0
|
6月前
|
算法 前端开发 Linux
【常用技巧】C++ STL容器操作:6种常用场景算法
STL在Linux C++中使用的非常普遍,掌握并合适的使用各种容器至关重要!
101 10
|
5月前
|
算法 C++
STL算法大全
以上只是一部分STL算法的简单概述,每一个算法都有其特定的使用场景和规则,具体使用时需要参考相关文档或者教程进行深入理解和学习。
38 0
|
6月前
|
算法 搜索推荐 C++
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
|
7月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(5) 常用算术生成算法
黑马c++ STL常用算法 笔记(5) 常用算术生成算法
|
7月前
|
算法 C++
c++算法学习笔记 (21) STL
c++算法学习笔记 (21) STL
|
7月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(6) 常用集合算法
黑马c++ STL常用算法 笔记(6) 常用集合算法
|
3天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
110 80
|
21小时前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。
|
22天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。

热门文章

最新文章