当前位置: 首页 > news >正文

C++中的数据结构

一.STL标准库

结构:STL中有六大组件,分别是:容器,算法,迭代器,仿函数,配接器,配置器;以下分别介绍这六大组件中的最主要的三个。

1.容器

容器来配置存储空间,算法通过迭代器来获取空间内容,仿函数来协助算法完成不同的策略
向量vector是连续存储的容器,一种动态的数组,有三个指针,分别指向首端,已使用的尾部,整体的尾部,当增加数据导致分配的内存不够时,重新申请开辟一块更大的内存,将数据拷贝过去。vector适用于顺序性的遍历。
列表list是不连续的链式的双向链表存储空间,所以顺序读取较慢,但插入,删除较快,排序较快
队列queue专门用于在先进先出的上下文中操作,元素从容队列尾端压入,从队列头部取出。队列有连续的顺序存储,也有不连续的链式存储。通常做线程池一类的生产者消费者模式
映射Map是关联容器,按照特定的顺序存储由键值和映射值组合而成的元素,映射通常被实现为键值对访问的红黑树,支持下标操作
栈stack是专门用于后进先出的上下文中操作,在这种上下文中,元素只从容器的一端插入和提取。通常用户顺序浏览界面并按序返回的情况

2.算法

查找搜索类算法:find,find_first_of,search,count
改变序列类算法:copy,transform,replace,remove,fill
关系类算法:equal,includes,mismatch
堆算法:make_heap,pop_heap,push_heap,sort_heap

3.迭代器

迭代器Iterator模式⼜称 Cursor(游标)模式,⽤于提供⼀种⽅法顺序访问⼀个聚合对象中各个元素, ⽽⼜不需暴露该对象的内部表示。或者说:Iterator模式是运⽤于聚合对象的⼀种模式,通过运⽤该模式,使得我们可以在不知道对象内部表示的情况下,按照⼀定顺序(由iterator提供的⽅法)访问聚合对象中的各个元素。由于Iterator模式的以上特性:与聚合对象耦合,在⼀定程度上限制了它的只能在STL中运⽤,⼀般仅⽤于底层聚合支持类,如STL的list、vector、stack 等容器类及ostream_iterator等扩展iterator。

二.存储结构

数据存储我们常见的有二叉树,B树,红黑树,链表等,其中最为常用的是二叉树和双链表。

1.二叉树遍历

二叉树的遍历顺序前中后是针对根节点来说的,前序就是根在前,中序就是根在中,后序就是根在最后,如针对子图来分别进行遍历
二叉树
前序遍历:遍历顺序是根左右,上图遍历顺序是:ABDFECGH
中序遍历:遍历顺序是左根右,上图遍历顺序是:DFBEACHG
后续遍历:遍历顺序是左右根,上图遍历顺序是:FDEBHGCA

2.红黑树

节点是红色或黑色
根节点是黑色
每个为空的叶子节点是黑色的
每个红色节点的两个子节点都是黑色
从任意节点到其每个叶子的所有路径都包含相同数目的黑色节点
时间复杂度为O(lgn)
本质上是自平衡二叉树

3.B+树

关键字集合分布在叶子结点中,非叶节点只是叶子结点中关键字的索引
B+树中的关键字必须出现在叶节点中,也可能在非叶结点中重复出现
B+树非叶子节点不存储数据,每个叶子节点指向相邻的叶子节点

4.Hash哈希表

时间复杂度O(1)
存储键值对这种对应的数据
通过开放地址法、链地址法解决哈希表的冲突和溢出问题
非线性结构

5.list链表

线性结构
由节点组成,每个节点包含数据和指向下一个节点的指针
优点:插入和删除操作非常高效,只需调整指针即可
缺点:访问任意元素的效率较低,需要遍历整个链表

6.双链表
1.双链表结构

双链表结构

2.正序输出

双链表正序输出

3.倒序输出

双链表倒序输出

4.双链表头插法

在这里插入图片描述

三.数据序列化

常用的数据序列化有:Json格式,XML格式,protobuf格式。
Json:一般的web项目中,目前最流行的主要就是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持
xml: 在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签。json使用了键值对的方式,不仅压缩了一定的数据空间,同时也具有可读性
protobuf:是后起之秀,是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式,需要编码和解码。数据本身不具有可读性。因此只能反序列化之后得到真正可读的数据。

相关文章:

C++中的数据结构

一.STL标准库 结构:STL中有六大组件,分别是:容器,算法,迭代器,仿函数,配接器,配置器;以下分别介绍这六大组件中的最主要的三个。 1.容器 容器来配置存储空间,算法通过…...

武汉星起航:一站式服务,助力亚马逊卖家高效运营,实现收益飞跃

在跨境电商的浪潮中,武汉星起航电子商务有限公司以其独特的一站式跨境电商服务,为众多亚马逊卖家提供了强有力的支持,助力他们在不断发展的市场中脱颖而出,实现收益的大幅提升。 武汉星起航的一站式跨境电商服务,以其…...

从灵感到实践:Kimi辅助完成学术论文选题的文艺之旅

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 昨天我们为大家介绍了ChatGPT辅助完成实现设计(AI与学术的交响:ChatGPT辅助下的实验设计新篇章)。今天我们再来看看Kimi对于论文选题都能提供哪些帮助…...

华为od-C卷200分题目4 -电脑病毒感染

华为od-C卷200分题目4 -电脑病毒感染 一个局域网内有很多台电脑,分别标注为0 - N-1的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t表示。其中网络内一个电脑被病毒感染,其感染网络内所有的电脑需要最少需要多长…...

show-overflow-tooltip 解决elementui el-table标签自动换行的问题

elementui中 el-table中某一行的高度不想因为宽度不够而撑开换行展示的解决方法。可通过show-overflow-tooltip属性解决&#xff0c;如下 代码是这样的 <el-table-column width"80" prop"id" label"ID"></el-table-column> <el…...

数字社交的领航者:解析Facebook的引领作用

在当今数字化社会中&#xff0c;社交网络已经成为了人们日常生活不可或缺的一部分。而在众多社交平台中&#xff0c;Facebook凭借其巨大的用户基础和创新的技术应用&#xff0c;被公认为数字社交领域的领航者之一。本文将深入解析Facebook在数字社交中的引领作用&#xff0c;探…...

深度分析 Apache Flink 窗口机制

什么是 Flink 窗口&#xff1f; Apache Flink 是一个用于处理实时流数据的开源框架&#xff0c;其核心功能之一是窗口&#xff08;Window&#xff09;机制。窗口是 Flink 在处理流数据时用于划分数据流的逻辑概念&#xff0c;它将无限的流数据切割成有限的、可管理的部分&…...

ubuntu 软链接(ubuntu20.04)

ubuntu 软链接&#xff08;ubuntu20.04&#xff09; 在Ubuntu和其他Linux系统中&#xff0c;软链接&#xff08;也称为符号链接&#xff09;是文件系统中的一个特殊类型的文件&#xff0c;它作为一个引用或指针&#xff0c;指向另一个文件或目录。软链接类似于Windows中的快捷…...

如何在LabVIEW中使用FPGA模块

LabVIEW FPGA模块是NI公司推出的一款强大工具&#xff0c;它允许用户使用LabVIEW图形化编程环境来开发FPGA&#xff08;现场可编程门阵列&#xff09;应用程序。与传统的HDL&#xff08;硬件描述语言&#xff09;编程相比&#xff0c;LabVIEW FPGA模块大大简化了FPGA开发的过程…...

FPGA开发技能(7)Vivado设置bit文件加密

文章目录 前言1. AES加密原理2.xilinx的AES方案3.加密流程3.1生成加密的bit流3.2将密钥写入eFUSE寄存器 4.验证结论5.传送门 前言 在FPGA的项目发布的时候需要考虑项目工程加密的问题&#xff0c;一方面防止自己的心血被盗&#xff0c;另一方面也保护公司资产&#xff0c;保护知…...

【算法专题--链表】旋转链表 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题思路---闭合为环 &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 旋转链表 这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&#x…...

ElasticSearch 和 MySQL的区别

MySQLElasticSearch 数据库&#xff08;database&#xff09;索引&#xff08;index&#xff09;数据表&#xff08;table&#xff09; 类型&#xff08;type&#xff09; 记录文档&#xff08;document&#xff0c;json格式&#xff09; 一、ES基础命令 1. ES cat查询命令 2.…...

Linux部署wordpress站点

先安装宝塔面板 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec 因为wordpress需要php&#xff0c;mysql&#xff0c;apache &#xff0c;httpd环境 参考&#xff1a;Linux 安装宝塔…...

实体零售连锁企业如何通过物流接口实现数智化转型升级?

在电子商务浪潮的持续冲击下&#xff0c;传统的实体零售行业面临着巨大的挑战。为了在线上线下融合的新零售时代保持竞争力&#xff0c;众多实体零售企业积极寻求数字化转型的突破。 某中国零售连锁百强企业近年来致力于打造自有品牌的线上销售体系&#xff0c;自2021年8月起接…...

AWS EKS上GPU工作负载自动扩缩容的异常排查指南

在AWS EKS上使用Karpenter和KEDA实现GPU工作负载的自动扩缩容是一个复杂的过程,涉及多个组件的协同工作。当遇到问题时,系统性的排查方法可以帮助我们快速定位和解决问题。本文将详细介绍如何对这个系统进行全面的异常排查。 1. Karpenter相关组件检查 1.1 NodePool检查 N…...

Pytest+Allure+Yaml+Jenkins+Gitlab接口自动化中Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …...

应用及安全

目录 一、PAM 安全认证及配置 1.1配置 su 命令的认证 1.2PAM 配置文件结构二、账号和密码安全管理 2.1账号管理 2.2系统账号清理 2.3密码安全控制 2.4密码重设示例 2.5参考命令三、命令历史限制 3.1设置命令历史记录…...

字节流和字符流的相关知识

目录 1. Writer1.1 写两行数据1.2 换一种方式1.3 追加数据1.4 写很多数据&#xff0c;记得要清一下缓存1.5 用数组、字符串写入 2. Reader2.1 读个文件2.2 读取字符2.3 读取数据到数组2.4 复制文件 3. InputStream4. OutputStream5. 参考链接 1. Writer Writer类是Java.io包中…...

LLM意图识别器实践

利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类 ❝ 本文译自Supercharging If-Statements With Prompt Classification Using Ollama and LangChain一文&#xff0c;以Lumos工具为例&#xff0c;讲解了博主在工程实践中&#xff0c;如何基于LangChain框架和本地LLM优…...

常见的反爬手段和解决思路(爬虫与反爬虫)

常见的反爬手段和解决思路&#xff08;爬虫与反爬虫&#xff09; 学习目标1 服务器反爬的原因2 服务器长反什么样的爬虫&#xff08;1&#xff09;十分低级的应届毕业生&#xff08;2&#xff09;十分低级的创业小公司&#xff08;3&#xff09;不小心写错了没人去停止的失控小…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...