【五一创作】c++七种常用数据结构

数据结构(C++版)王红梅 第一章 绪论 逻辑结构可以分为 (1)线性结构 一对一 有且只有一个开始和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继 例如:线性表、栈、队列、串。 (2)非线性结构 一对多 一个结点可能也有多个直接前驱和直接后继 例如:树、图。 数据结构从逻辑上分为四类: (1)集合:数据元素之间就是“属于同一个集合” (2)线性结构:数据元素之间存在着一对一的线性关系 (3)树结构:数据元素之间存在着一对多的层次关系 (4)图结构:数据元素之间存在着多对多的任意关系。... 阅读详情

一、静态数组array

静态数组(array),是一种常用的数组,属于线性数据结构,赋值直接使用等于号

a[1] = 3;

 定义静态数组方式如下:

int a[空间];

其中,空间在60000000左右

我们可以将数组视为一个表格

数组从0位置开始,当数组下标<0时,会RuntimeError

这是一维数组,接下来是二维数组

int a[空间][空间];

其中,空间²在60000000左右

将表格扩容:

我们举一个数组的例子

前缀和

一维前缀和:

for (int i = 1; i <= n; i++)
    d[i] = d[i - 1] + a[i];

当i = 1时,语句中d[i - 1]的下标是0

如果i从0开始,就会RE。


 二、vector

vector和静态数组相似,但推入需使用push_back

vector相比array不用用户赋值,并且默认推入一个值时,vector将其存储进了0位

#include <vector>  //vector头文件
...
vector<存储的东西的类型> v;
...
cin >> n;
v.push_back(n);
cout << v[0];


 三、队列queue

队列queue

就像排队买乌龟一样

 queue使用push推入,pop弹出

定义它:

queue<int> q;

push() 在队尾插入一个元素

q.push(3);

pop() 弹出第一个元素

q.pop();

size() 返回元素个数

int t = q.size();

empty() 是否为空,空则true

if (q.empty()) {
    ...
}

front() 返回第一个元素

int t = q.front();

back() 返回最后一个元素

int t = q.back();

别忘了头文件:

#include <queue>

四、优先队列priority_queue

priority_queue在queue的基础上增加了默认排序功能

默认大的在顶端:

priority_queue<int> q;

 特殊定义小的在顶端:

​priority_queue<int, vector<int>, greater<int> > q;

 五、栈stack

栈stack,通常一起被人们提到,因为它们俩很相似,队列是先进先出,很公平,但栈很不公平,它先进后出(先到后得?)。

我们可以用一个一端封口的隧道(那queue就是普通隧道了)来看它

 这就是入与出

头文件:

#include <stack>

定义栈:

stack<int> s;

 栈和队列操作语句几乎相同。


六、map

map,一种特别厉害的数据结构

说说它的存储:

1、当要存储的数在int范围内时,map可以实现

2、map的下标可以是任意类型

!!!!!

map的遍历需使用iterator

头文件:

#include <map>

定义map:

 定义map时尖括号里有两个类型,第一个是下标类型,第二个是存储的东西的类型。

map<int, int> m;
//本map指int类型的下标存储着int类型(array中表示a[1] = 1)

map<string, double> m;
//本map指string类型的下标存储着double类型
(array中表示a["string"] = 1.1,在array中不可实现)

使用it遍历:

for (map<类型,类型>::iterator it = m.begin(); it != m.end(); it++) {
    ...
}

 七、set

set,比map稍低级,也来存储各种类型

#include <set>  //头文件

using namespace std;

set<int> s;

int main () {
    
    s.insert(1);  //set使用插入
    
    for (set<int>::iterator it = ...) {
        ...
    }
    
    return 0;
}

 当然也有其他数据结构,例如链表等等,可以自己去查阅

这些头文件均可以用一个头文件代替,那就是万能头文件

#include <bits/stdc++.h>

C++中常用的数据结构 一直以来虽然写的都是C++的代码但是基本上用的都是C的数据结构。这次实现一个相对大型的C++项目,发现了很多很有用的数据结构,通过使用这些数据结构,可以极大程度的提高开发效率。所以计划逐渐整理下C++的数据结构,以及他们的用法,以供自己以及小白参考。暂时不涉及时间性能。 std::string std::vector std::vector<int> vec; std::vector<int> vec(3); // 深度为3的整形数据 std::vector<int> 阅读详情

相关推荐

C++常用数据结构总结

前言 所有的容器归根到底都是内存空间的排列方式和在空间上施加各种各种不同的限制所得的。空间排列方式只有线性和链式两种方式,链式是通过记录每一个数据的地址来实现查找下一位数据的。而每一个容器所具有的特性就决定了它所适用的情况,总的来看容器常用的无非是增删改查操作,下面将从适用场景、常用操作来进行总结。 array数组 内存空间为连续的一段地址,适用于提前已知所要存储的数据类型和数量、进行大量...

W.J.Z 3万+

C++常用数据结构

常用数据结构 目录 1.线性表 定义: 特点: 1.1顺序表 定义: 特点: 实现: 基本操作: c语言版本: c++版本: 1.2链表 定义: 特点: 实现: 基本操作: 完整程序 c++版本...

火柴的初心的博客 1万+

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 259

C++——数据结构

前言 线性表(有序表)分为数组描述的线性表和链式描述的线性表。 数组和矩阵。 栈和队列。 跳表和散列。 二叉树和其他树。 优先级队列。 竞赛树和搜索树。 平衡搜索树。 图。 一、线性表——数组描述 (1)数组类型(通过模板类解决)和数组长度(动态数组解决)。 (2)动态数组,可以使用一个变量(非const值)从键盘上获取数组的长度: int n; printf("请输入数组的长度:"); scanf("%d",&n); int sz[n];//动态数组 (3)没有实现代码的成员函数称为纯虚函数;

摸鱼中...... 6416

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

如图所示,用红线圈出的两条头文件引用会报错,提示无法找到他们,但是可以发现的是,他们的路径书写是没有问题的。在终端中运行时候,会出现如下的报错。

GFCLJY的博客 1007

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2552

五一创作活动获奖名单已公布

五一福利活动获奖名单已公布,快来看看你上榜没有哦~

优快云 官方博客 5771

在PyCharm中配置使用Anaconda环境

在PyCharm中配置使用Anaconda环境一、步骤1.Anaconda2.PyCharm总结 一、步骤 1.Anaconda 如未安装Anaconda可至其官网下载,学习使用个人版就可以了。 下载地址:https://www.anaconda.com/products/individual 1、打开Anaconda Navigator,点击Environments可以看到anaconda中已经有了默认的“base”环境,其中包含了大多数我们会用到的包,在PyCharm中可以直接使用该环境,而无需自行下载

TuckX的博客 19万+

【五一创作】C++程序设计与算法(一) 北京大学 郭炜

为什么是C++而不是C语言 C语言是好东西,但是有点弱 C++ 更是好东西,但是有点烦 我们要学的,是C++的一部分,基本上就是:C语言+ STL (STL是C++中能让你节省大量编程时间的神兵!因为暂时不写大程序,因此不用关心“面向对象”的事情!STL: (Standard Template Library) 标准模板库包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组、链表、字典等。使用方便,效率较高要使用其中的算法,需要#include。

shaozheng0503的博客 1384

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 247

手把手教你搞定国民技术N32G031的Keil开发环境(附Pack包和JLink配置)

本文详细指导如何搭建国民技术N32G031的Keil开发环境,包括Keil MDK安装与激活、Pack包导入、JLink调试器配置等关键步骤。特别针对新手常见问题提供解决方案,帮助开发者快速上手N32G031系列MCU的开发工作。

cuangu9341的博客 427

【五一创作】:数据结构之树状数组 ——详解

树状数组是一种维护前缀和、区间和的数据结构。它在原数组上添加索引,从而高效维护数据。神奇而小巧的数据结构,树状数组的下标必须从1开始!无论是他的修改还是查询,时间复杂度永远都是 logn,适合用于做区间和,前缀和,单点修改比前缀和标准做法的修改快一些。

weixin_55786578的博客 185

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2211

【五一创作】C++刷题 【入门4】数组

计算机运算速度很快,一秒钟可以处理成千上万的数据。之前的例子都是读取一个数据后立刻对这些数据进行处理,然后再也不需要用到这些数据了;有时候,我们读入数据后还需要将这些数据保存下来,便于以后再次使用。如果保存个别几个数据,可以设立几个变量存储;但是如果要存储成千上万个数据,总不能定义成千上万个变量吧。既然可以通过循环语句来重复执行结构类似的语句,也有办法一次定义一组成千上万个的相同类型的变量——使用数组。这样就可以把大量的数据存储下来,随时使用了。

shaozheng0503的博客 615

从零到多智能体:Google Agent开发套件(ADK)入门指南

ADK促进自定义工具生产的能力是其优势之一。本质上,工具只是一个带有描述性文档字符串的Python函数。

独立开发,substack顶级编辑 2492

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++高阶 C++绝对不要在析构函数里面抛出异常

五一待写

二进制君 1819

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#

中建三局,宁德时代,金证科技,途游游戏,得物,蓝禾,顺丰,康冠科技24春招内推①得物【岗位】技术,设。投了很多字节岗位,之前还会打电话,现在都没有了,有哪个部门hr帮忙捞一下吗 #找工作时遇到的神仙HR。

2301_78234743的博客 1009

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【2023年度总结】重生之我在优快云写博客

总结了嵌入式的一些文章,包括嵌入式基础知识、C语言、音视频基础知识、数据结构、网络基础等

wkd_007的博客 2931

22东南网安专硕上岸经验贴

东南网安考研经验

weixin_43821215的博客 3692

C++数据结构

4.删除任意一个元素 heap[k] = heap[size];每个节点存储他的父节点,p[x] 表示x的父节点。3.删除最小值 heap[1] = heap[size];head -> (val,*next) -> (val,*next) -> (val,*next)->空。问题3:如何合并两个集合:px是x的集合编号,py是y的集合编号。问题2:如何求x的集合编号:while( p[x]!问题1:如何判断树根:if(p[x] ==x)

hurricane777777的博客 2835

C++ 数据结构

一、C++ 数据结构 C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。 结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性: Title :标题 Author :作者 Subject :类目 Book ID :书的 ID 1.1 定义结构 为了定义结构,您必须使用 st...

书香水墨 1551
上一篇: 洛谷P1062 [NOIP2006 普及组] 数列
下一篇: 洛谷P1141 01迷宫
Runcode8
博客等级 码龄4年 180粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值