c语言vector+erase用法,C/C++知识点之vector使用篇erase
本文主要向大家介绍了C/C++知识点之vector使用篇erase,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
由于最近项目使用中发现了之前对vector的一个误区,由此发现自己对vect非常不了解,对此进行了一些了解,由此打算写一下关于vector使用方面的注意点,本篇先来讲一下vector的erase功能,若有不对,尽请大家指出首先写了一个函数,用于打印vector内存情况,分别打印vector存储数据内容及内存地址:
void printVec(vectoroutputVec)
{
if (!outputVec.empty())
{
int nSize = outputVec.size();
for (int i = 0; i
{
printf_s("%d %d\r\n", outputVec.at(i), &(outputVec.at(i)));
}
}
cin.get();
}
然后我们开始测试vector的erase功能
我们先申请一个vector对象,并向其中压入10个数据
vectormyVec;
cout<
for (int i = 0; i <10; i++)
{
myVec.push_back(i);
}
printVec(myVec);
再将其按照错误的方式删除,也就是我之前使用的方式
vector::iterator itePre;
cout<
for (itePre = myVec.begin(); itePre != myVec.end(); itePre++)
{
myVec.erase(itePre);
}
printVec(myVec);
按我以前的理解,这样的循环删除方式预期的结果应该是会把vector中的数据清空,但是事实并非如此事实会导致程序崩溃
因为itePre迭代器本身在被erase之后,是不可预测的,不应该再次被使用。
为此我修改了代码如下:
vector::iterator itePre;
cout<
for (itePre = myVec.begin(); itePre != myVec.end(); itePre++)
{
itePre = myVec.erase(itePre);
}
printVec(myVec);
得出的结果也并不是我想要的清空所有数据
而是只删除了一半的数据,为什么呢?
因为在MSDN中,针对erase的返回值是这么描述的:
Return Value
An iterator that designates the first element remaining beyond any elements removed, or a pointer to the end of the vector if no such element exists.
也就是说erase的返回值是返回被删除元素向后的第一个元素,按照我的代码,在删除元素后的第一个元素下我又++了,那么就跳过了那一个元素,自然结果就不是我想要的。
因此我再次修改代码如下:
myVec.clear();
cout<
for (int i = 0; i <10; i++)
{
myVec.push_back(i);
}
printVec(myVec);
cout<
for (itePre = myVec.begin(); itePre != myVec.end();)
{
itePre = myVec.erase(itePre);
}
printVec(myVec);
本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C/C+频道!
c语言vector+erase用法,C/C++知识点之vector使用篇erase相关推荐
- Cmn递推函数c语言,Cmn排列组合 高三数学知识点总结归纳5篇精选
高三学生很快就会面临继续学业或事业的选择.面对重要的人生选择,是否考虑清楚了?这对于没有社会经验的学生来说,无疑是个困难的想选择.如何度过这重要又紧张的一年,我们可以从提高学习效率来着手!下面就是小编 ...
- c语言vector+erase用法,vector.erase用法注意事项
转自->这里 vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(iterat ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- boost::fusion::erase用法的测试程序
boost::fusion::erase用法的测试程序 实现功能 C++实现代码 实现功能 boost::fusion::erase用法的测试程序 C++实现代码 #include <boost ...
- 【转】C++学习二 vector的用法(使用sort对于vector排序)
一.vector的介绍 vector是C++里面的一个容器,也是我们数学上面理解的向量,有一些比较常见的操作. 二.vector的定义 #include<vector> using nam ...
- c++ vector 初始化_什么?还不懂c++vector的用法,你凭什么勇气来的!
作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 前言 今天继续肝C++,一入C++深似海.越学越有意思.今天给大家带来一篇c++vector的介绍,难以置信这篇文章写了我三天,不过总算整 ...
- vector 清空 Linux,STL容器vector基础用法小结
STL容器vector基础用法小结根据<ACM程序设计>写的,用实例展示vector用法. 方法:push_back(), insert(), erase(), clear(), size ...
- C++ vector详细用法
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...
- C++ vector的用法总结(整理)
vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. vec ...
最新文章
- 6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
- linux记录用户命令的日志是,用日志记录Linux用户执行的每一条命令
- 调用天气预报Web Service
- java 命令行 读取文件_java读取txt文件
- android区块链 钱包_区块链钱包Cashbox 开发工程师聊一聊开源
- c语言边序列构造邻接表,结构C语言版期末考试考试(有答案).doc
- 百度贴吧发帖软件_贴吧自动发帖软件
- 例子---PHP与Form表单之二
- 简单的Jquery焦点图切换效果
- Spring mvc框架 controller间跳转 ,重定向 ,传参
- Cadence元件库介绍
- python达内培训视频
- appium +夜神模拟器 java代码sendkeys 无法在模拟器输入中文
- 高通量测序数据分析:RNA-seq
- 小白学电脑计算机的组成,零基础的电脑小白学电脑
- 计算机硬件加速怎么开,硬件加速有什么用(电脑如何开启硬件加速)
- 万花筒写轮眼画法_纯canvas来画出斑的万花筒写轮眼
- 电脑端的android模拟器
- 七大设计原则之合成复用原则
- 名空间 (Namespaces)
热门文章
- 前端面试题大全持续更新中……
- 怎么实现EDIUS中白平衡的快速调整
- 22-05-29 西安 javaweb(11) ajax、axios、gson/jackson/fastjson
- 迪士尼抢买《人世间》版权,国剧出海展示立体中国!
- 飞桨文心大模型挑战高考作文:平均1秒生成1篇,水平超75%考生
- (补充)赶鸭子上架学D3.jsdataenter的(二)---data,datum,update,enter,exit基础概念(b站从零开始画图表学习笔记,感谢up主睿小狼)
- 【comsol学习3】-基本操作之同时打开多个文件
- 汽车座椅位置自动调节中高灵敏度数字式锁存
- 基于JSP+Servlet+MySQL+Css+Ajax的在线网上电子图书商城
- 工大SSE(中等难度)