c++--vector
1.定义vector
vector的定义分为四种
(1)vector() ——————无参构造
(2)vector(size_t n,const value_type& val = value_type()) ——————构造并初始化n个val
(3)vector(const vector& v1) ———————拷贝构造
(4)vector(inputiterator first,inputiterator last) ————使用迭代器进行初始化
代码模拟实现:
namespace c_simplystudy:
{
template<class T>
class vector
{
public:vector(){_start = nullptr;_finish = nullptr;_endOfStorage = nullptr;}vector(int n, const T& value = T()):_start(new T[n]),_finish(_start+n),_endOfStorage(_finish){for (int i = 0; i < n; i++){*(_start + i) = value;}}
template<class InputIterator>vector(const vector<T>& v):_start(nullptr),_finish(nullptr), _endOfStorage(nullptr){reverse(v.capacity());iterator it = begin();const iterator last = cbegin();while (it != last){*it++ = *last++;}_finish = it;}vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);first++;}}
private:
iterator _start; // 指向数据块的开始
iterator _finish; // 指向有效数据的尾
iterator _endOfStorage; // 指向存储容量的尾
};
}
2.vector迭代器的使用与空间增长控制
迭代器:
(1)begin()————获取第一个数据位置的iterator/const_iterator
(2)end()————获取最后一个数据的下 一个位置的iterator/const_iterator
(3)rbegin()————获取最后一个数据位置的reverse_iterator
(4)rend()————获取第一个数据前一个位置的reverse_iterator
空间增长:
(1)size()————获取数据个数
(2)capacity()————获取容器容量
不同的编译器下,容器“满了”时,扩容的规则不同,在VS下是按1.5倍增长的,g++则是按2倍增长
(3)empty()————判空
(4)reserve()————改变capacity
reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代 价缺陷问题
(5)resize(n,val)————改变size(n为改变后的size,val为用于初始化的值)
如果n<size,则size=n,不进行初始化;如果n>capacity,则扩容至n,并且将未初始化的数据初始化为val
3.vector增删查改
(1)push_back()————尾插
(2) pop_back()————尾删
(3)find()————查找
如果存在则返回位置
(4)insert()————插入
(5)erase()————删除
(6)swap()————交换两个vector
(7)operate[]————下标索引
4.vector迭代器失效
vector的增删会导致迭代器失效——实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)
迭代器失效有两种情况:
(1)当 it 用vector.begin()初始化后,如果对vector进行增或者可能会导致其扩容的操作,则vector在扩容时会释放掉旧空间,begin()会指向新空间,而这里的 it 却仍指向被释放掉的旧空间,此时用 it 进行迭代器操作则会发生迭代器失效
int main()
{vector<int> v{1,2,3,4,5};auto it=v.begin();v.reserve(100); //通过扩容使迭代器失效while(it != v.end()){cout << *it << " ";++it;} //vs下会直接崩溃return 0;
}
(2)继续将 it 用vector中的迭代器进行初始化,如果使用erase将 it 指向的迭代器删除掉,则 it 指向的迭代器会失效,如果仍然对 it 进行解引用,则会发生报错;erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理 论上讲迭代器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end 的位置,而end位置是没有元素的,那么pos就失效了。因此删除vector中任意位置上元素 时,vs就认为该位置迭代器失效了
#include <vector>
#include <algorithm>
int main()
{vector<int> v{1,2,3,4,5};vector<int>::iterator it = find(v.begin(), v.end(), 3);v.erase(it);while(it != v.end()){cout << *it << " ";++it;} //因为空间还是原来的空间,后序元素往前搬移了,it的位置还是有效的//erase删除的迭代器如果是最后一个元素,删除之后it已经超过end// 此时迭代器是无效的,++it导致程序崩溃return 0;
}
(此问题在string中也会出现,而且如果在linux环境下运行程序,由于g++编译器对于迭代器失效的检测并不严格,所以当迭代器失效后,对失效后的迭代器进行引用并不会报错,但是运行结果已经不同)
迭代器失效解决方法 :在使用前,对迭代器重新赋值
相关文章:
c++--vector
1.定义vector vector的定义分为四种 (1)vector() ——————无参构造 (2)vector(size_t n,const value_type& val value_type()) ——————构造并初始化n个val (3)vector(const vector& v1) ———————拷贝构造 (4)vector(inputiterator first,inpu…...
计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法
引言 卷积神经网络(Convolutional Neural Networks,简称 CNNs)是一种深度学习架构,专门用于处理具有网格结构的数据,如图像、视频等。它们在计算机视觉领域取得了巨大成功,成为图像分类、目标检测、图像分…...
c++题目_翻译家
题目描述 grang是一个帅气的翻译家他的任务是把摩斯密码翻译成2进制数,他要上课所以想请你帮他一下,他会给你 一段摩斯密码有“.”和“-”组成让你输出个二进制数。 翻译规则是:不用管-,看每一个.有几个"."组成如果有奇…...
【解析 ECharts 图表样式继承与自定义】
解析 ECharts 图表样式继承与自定义 本文将详细介绍 ECharts 的样式继承机制,从其原理、演进到实际应用场景,并结合实际开发经验分享一些实战技巧,帮助开发者在构建数据可视化页面时实现更统一、灵活的样式管理与高效开发。 一、背景与来龙…...
Python IP解析器 ip2region使用
说明:最近需要在python项目内使用IP定位所在城市的需求,没有采用向外部ISP服务商API请求获取信息的方案,则翻了翻,在搞Java时很多的方案,在Python端反而可选择范围很小。 # 示例查询 ips ["106.38.188.214"…...
Java Stream 流的介绍
介绍 在 Java 8 中,引入了 Stream API,它为处理集合(如 List、Set 等)提供了一种更简洁、声明式的方式。Stream 流的设计目标是支持对数据集合的高效操作,尤其是能够进行链式操作、并行处理等,极大地提升了…...
C++从入门到入土(八)——多态的原理
目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中,我们介绍了C三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将…...
BFS,DFS带图详解+蓝桥杯算法题+经典例题
1.BFS和DFS的定义与实现方式 1.1 深度优先搜索(DFS) 基本概念:DFS 是一种用于遍历或搜索图或树的算法。它从起始节点开始,沿着一条路径尽可能深地探索下去,直到无法继续或者达到目标节点,然后回溯到上一个…...
【RHCE实验】搭建主从DNS、WEB等服务器
目录 需求 环境搭建 配置nfs服务器 配置web服务器 配置主从dns服务器 主dns服务器 从dns服务器 配置客户端 客户端测试 需求 客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容…...
有哪些开源的智慧园区项目?
作为专注于数字孪生技术的开发者团队,我们一直在数字孪生圈分享开源项目。但最近一次与AI助手Deepseek的对话,却让我们“又惊又喜”。 ——当询问“有哪些开源的智慧园区项目”时,Deepseek的回答中竟包含了我们自己的开源项目! 这…...
prometheusalert对阿里云短信服务不适配问题处理
背景 想通过prometheusalert实现阿里云短信告警。结果在配置完altermanager和prometheusalert,以及阿里云短信服务中的各种签名和短信模板之后,在prometheusalert web ui上测试模板时一直报“模板变量JSON格式错误 或 JSON变量属性与模板占位符不一致”…...
NFC 碰一碰发视频源码搭建,支持OEM
一、引言 NFC(Near Field Communication)近场通信技术,以其便捷、快速的数据交互特性,正广泛应用于各个领域。其中,NFC 碰一碰发视频这一应用场景,为用户带来了新颖且高效的视频分享体验。想象一下&#x…...
浅谈鸿蒙跨平台开发框架ArkUI-X
之前写过使用uniapp的跨平台开发鸿蒙项目,今天分享一下开发体验更友好的跨平台开发框架ArkUI-X。 ArkUI-X看起来像是鸿蒙官方的框架,在DevEco中就可以安装和使用,而且会ArkUI就可以开发安卓和、iOS和鸿蒙三个平台的app,下面简单介…...
LLVM学习-- 构建和安装
一 LLVM版本 二 适用预构建的二进制文件安装LLVM 三 适用包管理器安装LLVM 四 从源码构建用于Linux的LLVM 五 从源码构建用于Windows和Visual Studio的LLVM 六 从源码构建用于MacOS 和XCode的LLVM 1.1 LLVM项目从10年前第一次发布到版本3.4,其SVN存储库包含了超过20…...
总结Solidity 的数据类型
数据类型 在 Solidity 中,类型系统非常丰富,主要分为 值类型(Value Types)和 引用类型(Reference Types)。此外,还有一些特殊类型和全局变量。 一.值类型 布尔型(bool)…...
C# 中泛型(Generics)的核心概念
在 C# 中,泛型(Generics) 是一种强大的编程特性,允许你编写可重用、类型安全的代码,而无需为不同类型重复编写相似的逻辑。泛型的核心思想是参数化类型,即通过占位符(如 T)表…...
ubuntu 根据src 包从新打包
下边以onnxruntime示例: 1. 安装必要的依赖 确保你的系统已安装 devscripts、dpkg-dev 和 build-essential: sudo apt update sudo apt install devscripts dpkg-dev build-essential equivs2. 解压源码 进入存放源码包的目录,并解压: #c…...
如何启用 HTTPS 并配置免费的 SSL 证书
引言 HTTPS 已成为现代网站安全性的基础要求。通过 SSL/TLS 证书对数据进行加密,不仅可以保护用户隐私,还能提升搜索引擎排名并增强用户信任。本指南将详细介绍如何通过 Lets Encrypt(免费、自动化的证书颁发机构)为您的网站启用…...
Python数据与变量、进制转换、输入输出函数、基本运算,基础语法编程练习
第一节 数据与变量 程序 数据 指令 1.1 内置基本数据类型 (1)数值型 整数(int):用于表示整数,注意一点Python中int数据可以存储任意大小整数,不会像其他语言(C\C Java࿰…...
联邦学习(Federated Learning)
1. 概念 联邦学习(Federated Learning, FL)是一种分布式机器学习技术,它允许多个参与方(如设备、机构或企业)在不共享原始数据的情况下协同训练机器学习模型。联邦学习通过本地计算模型参数聚合的方式,保护…...
AI大模型核心原理(二)
一、人工智能的兴起。 1、前序。 艾伦麦席森图灵; 是计算机科学之父。 著名英国数学家、计算机科学家、逻辑学家和密码分析学家,被誉为计算机科学与人工智能之父。 阿兰・图灵(Alan Turing) 是译名(简称)…...
数据结构篇——线索二叉树
一、引入 遍历二叉树是按一定规则将二叉树结点排成线性序列,得到先序、中序或后序序列,本质是对非线性结构线性化,使结点(除首尾)在线性序列中有唯一前驱和后继;但以二叉链表作存储结构时,只能获…...
【蓝桥杯】742合唱队形(DP LIS)
思路 借这题复习一下LIS,实际上是LIS的升级版,求一个\/形或者/\行,用两次最长上升子串即可。 先从前往后求递增,再从后往前求递减。 先把满足要求的最长队形求出来,总人数减去队形人数就是要出列的数目。 code impo…...
MySQL二进制日志格式有哪几种
目录 一、二进制日志格式类型1. **STATEMENT 格式(SBR: Statement-Based Replication)**2. **ROW 格式(RBR: Row-Based Replication)**3. **MIXED 格式(混合模式)**二、二进制日志事件详解三、如何选择二进制日志格式?四、配置与查看二进制日志格式五、注意事项在 MySQL…...
VUE管理后台开发-vue-element-admin
# 克隆项目 git clone https://github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # 安装依赖 npm install # 速度过慢可以使用下面方法进行指定下载镜像原 # 也可以使用nrm选择下载镜像原 # 建议不要用 cnpm 安装 会有各种诡异的bug 可以通…...
计算机网络原理
网络发展史 起初,计算机之间是相互独立的,分别完成不同的工作,效率较为低下.随着时代的发展,计算机开始协同完成任务,就有了网络互连.网络互连是指将多台计算机连接在一起,完成数据共享.根据网络互联的规模不同,可以划分为局域网和广域网.局域网,简称LAN.局域网内的主机可以互相…...
速盾:如何利用CDN静态加速匹配尾缀提升网站性能?
在当前数字化时代,网站性能对于用户体验至关重要。尤其是对于包含大量静态资源(如图片、CSS、JavaScript文件等)的网站来说,如何高效地管理和加速这些资源成为了一个重要课题。本文将介绍如何利用CDN静态加速匹配尾缀的方法来提升…...
【H2O2 | 软件开发】前端深拷贝的实现
目录 前言 开篇语 准备工作 正文 概述 JSON方法 递归 其他 结束语 前言 开篇语 本系列为短篇,每次讲述少量知识点,无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的,希望对诸位有所帮助。…...
C#语法基础总结
输入和输出 输入 Console.Read(); 从屏幕读取一个字符,并返回该字符所对应的整型数字 Console.ReadLine(); 从屏幕读取一串字符,并返回该字符串 输出 Console.WriteLine(); 输出内容,并换行 Console.Write(); 输出内容,不换行…...
《深度学习》—— 模型部署
文章目录 模型部署模型准备选择部署平台部署配置与服务化测试与验证优化与维护常用工具与框架Flask本地部署模型 模型部署 模型部署是将训练好的机器学习或深度学习模型投入实际生产环境,使其能够处理实时数据并提供预测或推理服务的过程。 模型准备 模型格式转换…...
E902基于bash与VCS的仿真环境建立
网上看见很多E902仿真的文章,但用到的编译器是类似于这种Xuantie-900-gcc-elf-newlib-x86_64-V3.0.1-20241120,而我按照相应的步骤与对应的编译器,仿真总会报错。后面将编译器换成riscv64-elf-x86_64-20210512,反而成功了。现在开…...
挖矿------获取以太坊测试币
文章目录 挖矿------获取以太坊测试币通过水龙头获取以太坊测试币了解Sepolia是什么?水龙头(Faucet)是什么?Gitcoin Passport是什么? 操作1.MetaMask钱包2.将MetaMask切换到Sepolia测试网络3.用MetaMask连接Gitcoin Pa…...
MySQL事务详解:从理论到实践,保障数据一致性
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么需要事务?二、事务的四大特性(ACID)三、MySQL事务的使用方法1. 基本语法2. 自动提交的设置3. 保存点(…...
在家用台式机上部署 DeepSeek-R1:低成本高性能的 CPU 推理方案---不到 4 万元
近年来,随着大模型技术的飞速发展,开源模型如 DeepSeek-R1 的出现为技术爱好者提供了更多探索人工智能的机会。然而,这类模型动辄数百亿参数,传统意义上需要昂贵的 GPU 集群才能运行,让许多个人开发者望而却步。最近,腾讯玄武实验室基于 CPU 的硬件方案优化,成功将 Deep…...
神经网络量化3-全连接层实现量化
本节,我们模拟下全连接层实现量化,原理上为了方便计算,全连接矩阵采用动态量化的方法,而输入由于不断在变化,我们采用静态量化的方法,直接给出代码: import torch import numpy as np import m…...
12 File文件对象:创建、获取基本信息、遍历文件夹、查找文件;字符集的编解码 (黑马Java视频笔记)
文章目录 File >> 存储数据的方案1. 认识File2. File操作2.1 创建File对象2.2 File操作1)对文件对象的信息的操作2)文件/文件夹的创建/删除3)⭐⭐对文件夹的遍历 3. 方法递归3.1 认识递归3.2 递归算法及其执行流程1) 案例:2…...
【软件工程】03_软件需求分析
3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …...
词向量+位置编码=语义+语序?Transformer如何让相加操作不丢失原意?
在Transformer模型中,词向量(Token Embedding)和位置编码(Position Encoding)通过相加的方式结合,而模型能够同时保留词本身的语义信息和位置信息,这主要得益于以下机制: 为什么相加…...
Spring(7)——MyBatis入门(1)
一、MyBatis入门 1.1 什么是MyBatis MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。 1.2 如何操作MyBatis 在application.properties进行配置 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasou…...
C语言文件操作入门
本节重点 理解文件的形式与基本概念二进制文件与文本文件文件的打开与关闭文件读写函数、文件缓冲区 正文开始--------------------------------------------------------------------------------------------------------------------- 一、为什么使用文件 程序运行时数据存…...
Java返回多个参数的方法
背景 在写代码的过程中,因有一些复杂的业务逻辑,需要返回多个结果。比如:需要增加一个true或者false,另外在加一个真正的结果值这样的类型。可能会有人用到数组以及Map等作为结果返回,当然这样确实是可以完成这样的功…...
微软开源神器OmniParser V2.0 介绍
微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具,旨在将用户界面(UI)截图转换为结构化数据,从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型…...
Java基础关键_023_IO流(一)
目 录 一、概述 二、分类 1.根据数据流向 2.根据读写数据形式 3.根据流在 IO 操作中的作用和实现方式 三、FileInputStream 1.说明 2.常用方法 (1)read() (2)read(byte[] b) (3)read(byte[] b, …...
Lora 中 怎么 实现 矩阵压缩
Lora 中 怎么 实现 矩阵压缩 1. 导入必要的库 import torch import re from datasets import Dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, \get_cosine_schedule_with_warmup, EarlyStoppingCallback from peft...
lombok不起作用
xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> <scope>provided</scope> </dependency> - **作用**:引入 L…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-1-常用命令速查表-集群健康检查、索引生命周期管理、故障诊断命令
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-常用命令速查表 1-Elasticsearch 运维命令速查表(集群健康检查、ILM管理、故障诊断)一、集群健康检查与监控1.1 集群健康状态核心命令1.2 节点级健康诊断…...
探讨Deveco Studio常见问题及解决方案,分享快速排障方法
以下是针对 DevEco Studio 开发工具的常见问题、解决方案及快速排障方法,覆盖环境配置、编译运行、调试等多个环节,助您高效解决开发中的“拦路虎”。 一、环境配置问题 1. 安装失败或卡顿 现象: 安装时进度条卡住,或提示“Faile…...
Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则
目录 高层模块底层模块 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 依赖倒置原则 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 自己理解 开闭原则 …...
RISCV虚拟化环境搭建
概要 本文记搭建 RISCV 虚拟化环境的流程。 整体架构 我们使用 QEMU 来模拟 RISCV 的各种硬件扩展环境,通过 QEMU 启动 Ubuntu 作为我们的 Host 来在 Host 之中通过 KVMTOOL 来运行 Guest,学习 RISCV 的虚拟化。 目前我的 X86_64 主机使用的是 Ubunt…...
数据结构——串、数组和广义表
串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1a2...an(n≥0) 其中,S是串名,单引号括起来的字符序列是串的值, a i a_i a…...