首页/新闻资讯/正文详情

STL(c++)

发布时间:2026/9/24 16:51:10 来源:云帆数科 栏目:资讯中心
STL(c++)
本文介绍c标准模板库STL一、STL的组成STL提供了一套通用模板类和函数主要包含三个部分容器比如vector、list、map用来存储和管理数据算法比如sort、find用来对容器里的数据进行各种操作迭代器充当容器与算法之间的“胶水”让算法能通用化的访问容器的数据二、深拷贝在了解STL前我们需要了解什么是深拷贝构造。1、为什么需要深拷贝编译器自动生成的默认拷贝构造是逐字节复制如果对象里有指针那么浅拷贝只会复制指针本身而不是复制指针指向的内存。结果就是两个对象指向同一块空间。一旦一个对象被销毁另一个指针就会变成野指针。2、如何深拷贝方法一//深拷贝 string(const string s) :_str(new char[strlen(s._str)1])//浅拷贝_str(s._str);//两种拷贝的区别就在于是否开辟空间 { strcpy(_str, s._str); }方法二函数里开辟同样大小空间再使用函数交换两空间指针vectorT operator (vectorT v) { swap(v); return *this; } void swap(vectorT v) { ::swap(start, v.start); ::swap(finish, v.finish); ::swap(endofstorage, v.endofstorage); }三、迭代器1、迭代器的底层实际是只读指针例string迭代器的使用string::iterator it s1.begin(); while (it ! s1.end()) { *it - 1; it; }迭代器提供了标准化遍历方法让遍历容器不再需要关心容器底层数据结构。2、迭代器失效erase(),insert()在调用后迭代器会失效原因迭代器指向的地址仍然有效但该地址上存储的元素已经不是原来的元素了。例如 vector 删除中间元素后后续元素整体前移原迭代器指向的位置被新元素填充。迭代器失效后有可能正常运行也可能崩溃报错例如vector在增容时会开辟一块新的内存空间原来的空间上的数据会被拷贝到新空间旧空间销毁旧的迭代器此时指向旧空间指针迭代器变成了野指针但是如果是删除或者增加迭代器本身还是有效的但是由于更改位置之后的迭代器所指元素已经改变视为失效。四、容器容器容纳数据的数据结构第一种连续内存结构代表是 vector 和 string。底层就是一块连续的堆内存用三个指针管理start起始、finish当前末尾、end_of_storage容量末尾。迭代器就是原生指针 T*it 就是指针加一*it 就是解引用。它的优势是缓存友好——CPU 预取器能猜到你要访问下一块内存所以遍历速度极快。劣势是扩容代价大容量不够时要分配新内存、搬移所有元素、释放旧内存这个过程是 O(n)。 deque 也属于这一类但它不是单一连续块而是分段连续一个中控数组指针数组每个指针指向一块固定大小的缓冲区。这样它能在头部和尾部都做到 O(1) 插入代价是迭代器不能是简单指针必须封装成包含当前缓冲区指针 缓冲区内偏移的结构体it 时要判断是否跨越缓冲区边界。第二种节点式链表结构代表是 list双向链表和 forward_list单向链表。每个元素独立分配在堆上节点之间通过指针链接。迭代器是对 Node* 的轻量包装it 本质是 node node-next。它的优势是插入删除 O(1)——只需要改指针链接不动其他节点的内存。劣势是遍历慢节点散落在堆的各个角落Cache Miss 率极高实际遍历速度可能比 vector 慢一个数量级。第三种平衡二叉搜索树代表是 map、set、multimap、multiset。底层是红黑树每个节点包含 key、value、左子指针、右子指针、父指针、颜色标记。迭代器遍历本质是树的中序遍历——先递归左子树再访问当前节点再递归右子树所以遍历结果是有序的。红黑树不追求绝对平衡像 AVL 树那样而是通过红黑规则保证最长路径不超过最短路径的两倍。这样插入删除时的旋转次数比 AVL 少写入性能更好查询性能略差但仍在 O(log n)。第四种哈希表代表是 unordered_map、unordered_set 等C11 引入。底层是桶数组 开链法一个指针数组每个桶挂一条链表或红黑树冲突严重时自动切换。查找时先算 hash(key) % bucket_count 定位桶再在链表里线性搜索。平均复杂度 O(1)但最坏 O(n)——所有元素哈希到同一个桶时退化成链表。负载因子size / bucket_count超过阈值默认 1.0时触发 rehash分配更大的桶数组把所有节点重新哈希到新桶里。

相关推荐

PX4 飞控硬件详解:CUAV X25-EVO 规格、接线与固件构建指南
PX4 飞控硬件详解:CUAV X25-EVO 规格、接线与固件构建指南

PX4 飞控硬件详解:CUAV X25-EVO 规格、接线与固件构建指南 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 本文基于 PX4-Autopilot 仓库中 X25-EVO 官方文档 与 快速接线指南&#xff0… · 2026/9/24 16:50:51

Codex Security 标准安全扫描(Security Scan Skill)完整指南:从仓库级单遍审计到规范化扫描契约
Codex Security 标准安全扫描(Security Scan Skill)完整指南:从仓库级单遍审计到规范化扫描契约

应用安全漏洞扫描AI 应用 【免费下载链接】codex-security OpenAIs Codex Security CLI and TypeScript SDK for finding, validating, and fixing security vulnerabilities. npm: https://www.npmjs.com/package/openai/codex-security 项目地址: https://gitcode… · 2026/9/24 16:50:45

Axure 9.0 使用动态面板实现 Tab 切页
Axure 9.0 使用动态面板实现 Tab 切页

一、页面元件准备拖拽动态面板到画布,命名为tab_panel,设置足够宽高用来承载各个 Tab 内容。双击动态面板,新建多个状态,分别命名,例如tab1首页、tab2列表、tab3设置,每个状态内放入对应页面的内容。3. 在页… · 2026/9/24 16:50:45

YOLO端上部署:MNN Android部署YOLOv8 YOLO11 YOLO26(含源码,支持CPU和GPU)
YOLO端上部署:MNN Android部署YOLOv8 YOLO11 YOLO26(含源码,支持CPU和GPU)

YOLO端上部署:MNN Android部署YOLOv8 YOLO11 YOLO26(含源码,支持CPU和GPU) 目录 YOLO端上部署:MNN Android部署YOLOv8 YOLO11 YOLO26(含源码,支持CPU和GPU) 1. 前言 2. 部署框架MNN 3. 导出MNN模型 4. Android端上部署模型 … · 2026/9/24 17:28:54

导师放养,机械博士论文初稿拖到Deadline还毫无头绪,怎么办?
导师放养,机械博士论文初稿拖到Deadline还毫无头绪,怎么办?

前言机械博士最焦虑的时刻,可能不是实验失败,而是论文Deadline已经摆在眼前,打开Word却不知道从哪里开始。几年时间里做了大量实验、仿真,也发表了几篇SCI,可真正面对博士毕业论文时,却发现:实验… · 2026/9/24 17:28:54

DEIM 改进系列(八):频域处理改进——给特征“换个坐标系看问题“
DEIM 改进系列(八):频域处理改进——给特征“换个坐标系看问题“

DEIM 从主干到 neck 的所有算子都在空域干活——卷积在空域滑窗、注意力在空域加权,但很多结构信息(纹理、边缘、周期性)在频域里表达得更清晰。针对"全程空域视角"这个盲区,我们做了一批频域处理替换变体,双… · 2026/9/24 17:28:54

新型智慧城市建设项目初步设计与投资概算
新型智慧城市建设项目初步设计与投资概算

本份文档为地市级别智慧城市完整初设概算实战范本,适配智慧城市项目投标、可研‑初设编制、政务数字化咨询方案撰写。文档遵循国家及地方数字政府政策标准,采用 “1234” 总体架构,覆盖基础设施、八大基础支撑平台、多类主题智慧应用&#xf… · 2026/9/24 17:28:54

【Agent】【tools】3.Cassandra数据库工具
【Agent】【tools】3.Cassandra数据库工具

1. 案例目标本案例展示了如何使用LlamaIndex的Cassandra数据库工具,使AI代理能够高效地与Cassandra数据库交互。Apache Cassandra是一个广泛用于存储事务性应用程序数据的数据库。大型语言模型中函数和工具的引入为现有数据在生成式AI应用中的使用开辟了一些令人兴奋… · 2026/9/24 17:28:54

按键控制LED
按键控制LED

GPIO_ Read_ input_ Data_ bit 就是读取这里输入数据寄存器的某一位。 GPIO_ Read_ input_ Data 就是读取这整个输入数据寄存器。 GPIO_ Read_ output_ Data_ bit 就是读取这里输出数据寄存器的某一位。 GPIO_ Read_ output_ Data 就是读取这整个输出数据寄存器。 按键控制LED … · 2026/9/24 17:28:48

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码