网络科技公司网站首页说一说网站建设的含义

news/2025/10/6 18:05:04/文章来源:
网络科技公司网站首页,说一说网站建设的含义,西安网站制作公司排名,广东网站制作设计送给大家一句话#xff1a; 世界在旋转#xff0c;我们跌跌撞撞前进#xff0c;这就够了 —— 阿贝尔 加缪 vector问题解决 1 前言2 迭代器区间拷贝3 迭代器失效问题4 memcpy拷贝问题 1 前言 我们之前实现了手搓vector#xff0c;但是当时依然有些问题没有解决#xff… 送给大家一句话 世界在旋转我们跌跌撞撞前进这就够了 —— 阿贝尔 加缪 vector问题解决 1 前言2 迭代器区间拷贝3 迭代器失效问题4 memcpy拷贝问题 1 前言 我们之前实现了手搓vector但是当时依然有些问题没有解决 迭代器区间拷贝非法的间接寻址问题迭代器失效问题使用memcpy拷贝问题 接下来我们一点一点来解决这些问题 2 迭代器区间拷贝 来看这个这个构造函数 templateclass InputIteratorvector(InputIterator first, InputIterator last){while (first ! last){push_back(*first);first;}}这个是对迭代器区间进行的构造函数思路很简单把迭代器区间的数据依次尾插就可以了这里之所以另外使用一个新的模版而不是使用vector类的模版是为了兼容更多的数据类型。这样就可以通过一个现有的类型来构造容器。 但是出乎意料的是出现了一个问题 C2100 非法的间接寻址 编译层面的问题 。非法的间接寻址的造成原因有很多 空指针引I用当一个指针没有被初始化或者为NULL时对它进行间接寻址操作会导致非法访问。野指针引用当一个指针超出了它所指向的内存范围或者已经被释放但仍然被引用时进行间接寻址操作也会导致非法访问。类型不匹配如果试图将指针转换为不兼容的类型进行间接寻址也会导致非法访问。 我们分析一下我们遇到的问题是那种问题空指针引用吗不可能野指针引用吗也不可能 那么真相只有一个我们遇到了类型不匹配的问题那这是来自哪里的呢经过我的排除法注释不同的代码块来进行查找得到了结果 vectorint v1(5,6);这一行代码是我们出错的根源为什么这个构造没有去使用vector(size_t n,T val T()),而是使用我们的vector(InputIterator first, InputIterator last),因为第二个函数与5,6的类型更匹配编译器会寻找最合适的函数。 解决方法也是十分暴力多枚举几个 构造函数 vector(size_t n,T val T()) vector(int n,T val T()); vector(long long n,T val T());这样就会优先匹配vector(int n,T val T());了我们的问题也就解决了。 3 迭代器失效问题 这个问题主要出现在我们的插入操作insert和删除操作(erase)。来看 void vector_test7() {vectorint v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);v1.push_back(6);v1.push_back(7);vectorint::iterator it v1.begin() 3;// 4cout *it endl;v1.insert(3, 40);cout *it endl; }这个执行的结果是 迭代器的指向发生了改变我们实现的迭代器的底层是指针我们插入之后指针位置不变而数组元素改变自然会产生不一样的结果。这个问题看起来不严重那我们再来看 void vector_test7() {vectorint v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);v1.push_back(6);v1.push_back(7);v1.push_back(8);vectorint::iterator it v1.begin() 3;// 4cout *it endl;v1.insert(3, 40);cout *it endl; }为什么这里出现了乱码我们代码和之前的区别是什么一个进行了扩容一个没进行扩容。扩容之后vector的_start发生了改变自然我们的指针也失去了对应作用。 迭代器就失效了这个解决办法也很简单就是插入之后不要使用之前的迭代器一定要对迭代器进行更新。 再来看erase中的问题 void vector_test7() {vectorint v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);//v1.push_back(6);//v1.push_back(7);//v1.push_back(8);vectorint::iterator it v1.begin();//删除偶数while (it ! v1.end()){if (*it % 2 0){v1.erase(it);}it;}print_vector(v1); }这样运行起来是没有问题的那么再来看 void vector_test7() {vectorint v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(4);v1.push_back(5);//v1.push_back(6);//v1.push_back(7);//v1.push_back(8);vectorint::iterator it v1.begin();//删除偶数while (it ! v1.end()){if (*it % 2 0){v1.erase(it);}it;}print_vector(v1); }现在出现了 这个问题问题的来源也很简单我们迭代器在删除之后没有改变位置但是_start的元素发生了改变也就是相当于 it 向后移动了两次为了避免这个情况我们可以 while (it ! v1.end()){if (*it % 2 0){v1.erase(it);}else{it;}}这样就可以了 需要注意的一点是我们的操作是以g标准来进行的如果删除会进行缩容也会出现错误迭代器就不能进行了所以 在VS环境下vector 容器在erase 之后的迭代器是严格不能使用的使用就会报错,因为VS迭代器的底层不是原生指针判断有所不同。 迭代器失效解决方案总结 1. 删除插入之后更新对应迭代器erase删除后会返回新的迭代器 按规则进行迭代就可以了 it v1.erase(it) 2. 插入删除之后不使用迭代器 4 memcpy拷贝问题 我们创建一个string类的容器来看看能不能正常运行 void vector_test8() {vectorstring v1;v1.push_back(11111);v1.push_back(22222);v1.push_back(33333);v1.push_back(44444);v1.push_back(55555);print_vector(v1); }来看效果 程序直接崩掉了经过我们的调试我们能打印出来正确的数据但是走到程序最后的时候出现了错误那么应该就是析构函数的问题了 来画图分析一波 memcpy是内存的二进制格式拷贝将一段内存空间中内容原封不动的拷贝到另外一段内存空间中如果拷贝的是自定义类型的元素memcpy既高效又不会出错但如果拷贝的是自定义类型元素并且自定义类型元素中涉及到资源管理时就会出错因为memcpy的拷贝实际是浅拷贝。 结论如果对象中涉及到资源管理时千万不能使用memcpy进行对象之间的拷贝因为memcpy是浅拷贝否则可能会引起内存泄漏甚至程序崩溃 那么怎么解决呢非常简单 //扩容void reserve(size_t newcapacity) {//记录位置size_t n _finish - _start;T* tmp new T[newcapacity];//拷贝//memcpy(tmp, _start, size() * sizeof(T));for (size_t i 0; i size(); i){tmp[i] _start[i];}delete[] _start;_start tmp;_finish _start n;_end _start newcapacity;}不使用memcpy函数不就可以了然后我们使用简单粗暴的赋值拷贝这样就不会发生浅拷贝问题了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手实验——mybatis generator

前言 边学边做中 mapper的用处是和数据库交互,具体的行为找了一个mapper文件,让chatgpt讲解了一下,如下: 首先是方法表 | 方法 | 功能 | 是否常用 | | -----------------------…

迅速了解GO+ElasticSearch

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

学生管理系统面向对象分析报告

学生管理系统面向对象分析报告 目录1. 案例中哪里体现出了封装性及其好处? 2. 案例中的setter/getter模式与封装性? 3. 案例中某些类的toString()方法? 4. 案例中几个常用方法解析。 5. 案例中的面向对象设计 5.1 尝…

荷兰青少年通过Telegram被招募,涉嫌参与俄罗斯支持的黑客活动

两名17岁荷兰青少年通过Telegram被招募,涉嫌为亲俄黑客从事间谍活动。他们使用Wi-Fi嗅探器在欧盟机构总部和使馆周边进行网络测绘,目前一人被拘留,一人被软禁。案件凸显国家支持黑客利用未成年人作为"可抛弃代…

网站推广策划方案毕业设计免费建立网站有必要吗

一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器 说明:ip可以换为…

网站开发部门工资入什么科目营销一体化营销平台

org.springframework.util.StringUtils 1、字符串判断工具 // 判断字符串是否为 null,或 ""。注意,包含空白符的字符串为非空 boolean isEmpty(Object str) // 判断字符串是否是以指定内容结束。忽略大小写 boolean endsWithIgnoreCase…

Moscow International Workshops 2017. Day 4. Lviv NU Contest, GP of Ukraine

Preface 国庆本以为空的一批结果忙的飞起,好不容易抽时间凑到三个人,结果被 Div2 小登们按在地上摩擦。B. Card Game 签到,暴力枚举约数即可 #include<cstdio> #include<iostream> #include<map>…

网站开发有哪些技术wordpress新建音乐界面

转载自 ClassLoader 详解及用途 ClassLoader主要对类的请求提供服务&#xff0c;当JVM需要某类时&#xff0c;它根据名称向ClassLoader要求这个类&#xff0c;然后由ClassLoader返回这个类的class对象。 1.1 几个相关概念ClassLoader负责载入系统的所有Resources&#xff08;…

提供手机自适应网站土木工程网官网登录

Hadoop 1、 Hadoop的介绍 Hadoop最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎&#xff0c;包括网页抓取、索引、查询等功能&#xff0c;但随着抓取网页数量的增加&#xff0c;遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。2003年、20…

云原生架构的演进与落地:重塑企业 IT 的核心能力 - 实践

云原生架构的演进与落地:重塑企业 IT 的核心能力 - 实践2025-10-06 17:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

小代码使用npm包的方法

小代码使用npm包的方法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

用手机域名做网站有多少张家口网站建设工作室

以下是电力行业中分布式能源管理(Distributed Energy Management System, DEMS)的实现方案,涵盖系统架构、关键技术、核心功能及实施路径,结合典型场景与代码示例: 一、系统架构设计 采用云-边-端三层架构,实现分布式能源的高效协同管理: 1. 终端层(感知层) 设备组…

网站做支付宝接口网页设计基础试题

Java Learning Path&#xff08;三&#xff09;过程篇   每个人的学习方法是不同的&#xff0c;一个人的方法不见得适合另一个人&#xff0c;我只能是谈自己的学习方法。因为我学习Java是完全自学的&#xff0c;从来没有问过别人&#xff0c;所以学习的过程基本上完全是自己…

张家港做网站优化排名新乡网站设计公司

摘要&#xff1a;当前,多核技术的不断发展和日渐成熟,使得处理器的性能得到巨大提升.但是对于存储设备来说,无论是速度还是容量都无法跟上这种步伐.随着处理器和其它子系统发展差距的日益加大,超级计算机的效率问题逐渐成为人们讨论和研究的热点,大部分的实际应用在超级计算机上…

day18 课程(模块 )

day18 课程(模块 &)课程: 18.1 了解模块------------------------------------------------ 执行后18.2 导入模块之方法一------------------------------------------------ 执行后18.3 导入模块之方法二-----…

Kubernetes(K8s)核心架构解析与实用命令大全 - 教程

Kubernetes(K8s)核心架构解析与实用命令大全 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

mzoj 2025/10/6

T1 考试时写的 \(O(n^4)\) 的,差点四了( 可以直接用 Floyd 找哪些可以由其他路径拼起来,剩下的是必须的。 rep(k,1,n) rep(i,1,n) rep(j,1,n)if(mp[i][j]==mp[i][k]+mp[k][j]&&mp[i][j]&&mp[i][k]&…

在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 创建

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

全源最短路 Johnson算法

洛谷p5905 #include<bits/stdc++.h> using namespace std; #define endl \n typedef long long LL; typedef pair<int,int> PII; const int N=3e3+10,INF=1e9; vector<PII> edges[N]; int dist[N],n…