本文主要向大家介绍了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相关推荐

  1. Cmn递推函数c语言,Cmn排列组合 高三数学知识点总结归纳5篇精选

    高三学生很快就会面临继续学业或事业的选择.面对重要的人生选择,是否考虑清楚了?这对于没有社会经验的学生来说,无疑是个困难的想选择.如何度过这重要又紧张的一年,我们可以从提高学习效率来着手!下面就是小编 ...

  2. c语言vector+erase用法,vector.erase用法注意事项

    转自->这里 vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(iterat ...

  3. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  4. boost::fusion::erase用法的测试程序

    boost::fusion::erase用法的测试程序 实现功能 C++实现代码 实现功能 boost::fusion::erase用法的测试程序 C++实现代码 #include <boost ...

  5. 【转】C++学习二 vector的用法(使用sort对于vector排序)

    一.vector的介绍 vector是C++里面的一个容器,也是我们数学上面理解的向量,有一些比较常见的操作. 二.vector的定义 #include<vector> using nam ...

  6. c++ vector 初始化_什么?还不懂c++vector的用法,你凭什么勇气来的!

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 前言 今天继续肝C++,一入C++深似海.越学越有意思.今天给大家带来一篇c++vector的介绍,难以置信这篇文章写了我三天,不过总算整 ...

  7. vector 清空 Linux,STL容器vector基础用法小结

    STL容器vector基础用法小结根据<ACM程序设计>写的,用实例展示vector用法. 方法:push_back(), insert(), erase(), clear(), size ...

  8. C++ vector详细用法

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  9. C++ vector的用法总结(整理)

    vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. vec ...

最新文章

  1. 6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
  2. linux记录用户命令的日志是,用日志记录Linux用户执行的每一条命令
  3. 调用天气预报Web Service
  4. java 命令行 读取文件_java读取txt文件
  5. android区块链 钱包_区块链钱包Cashbox 开发工程师聊一聊开源
  6. c语言边序列构造邻接表,结构C语言版期末考试考试(有答案).doc
  7. 百度贴吧发帖软件_贴吧自动发帖软件
  8. 例子---PHP与Form表单之二
  9. 简单的Jquery焦点图切换效果
  10. Spring mvc框架 controller间跳转 ,重定向 ,传参
  11. Cadence元件库介绍
  12. python达内培训视频
  13. appium +夜神模拟器 java代码sendkeys 无法在模拟器输入中文
  14. 高通量测序数据分析:RNA-seq
  15. 小白学电脑计算机的组成,零基础的电脑小白学电脑
  16. 计算机硬件加速怎么开,硬件加速有什么用(电脑如何开启硬件加速)
  17. 万花筒写轮眼画法_纯canvas来画出斑的万花筒写轮眼
  18. 电脑端的android模拟器
  19. 七大设计原则之合成复用原则
  20. 名空间 (Namespaces)

热门文章

  1. 前端面试题大全持续更新中……
  2. 怎么实现EDIUS中白平衡的快速调整
  3. 22-05-29 西安 javaweb(11) ajax、axios、gson/jackson/fastjson
  4. 迪士尼抢买《人世间》版权,国剧出海展示立体中国!
  5. 飞桨文心大模型挑战高考作文:平均1秒生成1篇,水平超75%考生
  6. (补充)赶鸭子上架学D3.jsdataenter的(二)---data,datum,update,enter,exit基础概念(b站从零开始画图表学习笔记,感谢up主睿小狼)
  7. 【comsol学习3】-基本操作之同时打开多个文件
  8. 汽车座椅位置自动调节中高灵敏度数字式锁存
  9. 基于JSP+Servlet+MySQL+Css+Ajax的在线网上电子图书商城
  10. 工大SSE(中等难度)