| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++中的vector基本的数组出现停止工作。 -> 正文阅读 |
|
[C++知识库]C++中的vector基本的数组出现停止工作。 |
今天晚上的主要BUG就是这个,使用的事Devcpp ?? ?vector<int> sV = {1, 2, 3, 3, 2, 1}; 没想到初入STL,也不完全是初入,就遇到这种问题。 使用控制变量法,立马就查出了auto some=sV.erase(iter);这行代码用错了,本来目的是想用来删减掉iter指向的数据,但是明显这样用不行啊。要怎么办? 删除 vector 容器中 pos 迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器。该容器的大小(size)会减 1,但容量(capacity)不会发生改变。这样看来似乎是我的参数传错了,只有这种解释比较合乎情理。pos 为指定被删除元素位置的迭代器,同时该函数会返回一个指向删除元素所在位置下一个位置的迭代器。 突然间理解了,这个问题好像是越界,因为按照上面这个逻辑,始终必须返回下一个的话,那么如果我删除的是最后一个必然就会导致最终返回的some越界。 但我觉得vector设计肯定不会设计这么鸡肋的函数erase,否则这样根本就无法删除最后一个元素,删除最后元素始终会越界。但现实是真的这样鸡肋,我必须给erase加一个条件 2021年8月9日21:46:41这儿是真的是一个死循环,如果iter放在for()里面自增,必然会导致erase的时候溢出,而如果放在for循环的大括号里面,那么又很难保证。所以我增加了一个isInrease变量来判断是否递增了。 /*编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 int main() { ?? ?vector<int> sV = {3, 3, 2, 2, 2, 1}; } 当然我把cout里面的内容输出也变成下一个减一。我甚至现在会到过去,会不会是这个问题。 ?看来并不会。还是记住这一点,erase给的变量往往是希望作为for循环的变量。因为erase删除之后vector里面的内容发生了变化,这个时候指向被删除的下一个比较可靠。而for循环里面自动加一的话,不稳定。为什么?可以假设一种情况,当iter自增到iter=sV.end()-1,(我假设是5-1)这个时候满足for条件,然后在循环体里面,我把sV里面删去一个,这个时候sV.end的值会变小,变成了4。那么下一个循环体进行比较的时候判断就是iter==sV.end(),就直接跳出循环,但是实际上还差一个元素sV.end()没有进行判断。 另外一种情况,假设iter自增到了sV.end(),这是可能的,虽然我们每次判断都是iter!=sV.end(),但是假设sV.end()=10,iter=9,判断也是满足的,但是满足之后会自增到10.。 ? ?所以在这种情况下,sV如果继续删掉一个元素,那么将会导致下一次判断的时候sV.end()!=9 !=10=iter成立。这就直接进入死循环,导致异常情况的发生。 假设改条件嘛,把iter,检查依然会出问题,总之会带来很多不必要的麻烦。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 11:13:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |