vector容器中erase(删除)的使用

news/2024/9/18 5:25:46

erase函数可以用于删除vector容器中的一个或者一段元素,在删除一个元素的时候,其参数为指向相应元素的迭代器,而在删除一段元素的时候,参数为指向一段元素的开头的迭代器以及指向结尾元素的下一个元素的迭代器;
在进行单个元素删除后,传入的迭代器指向不变,仍然指向被删除元素的位置,而被删除元素之后的所有元素都向前移动一位,也就是该迭代器实际上是指向了原来被删除元素的下一个元素。
删除一段元素后,传入的迭代器指向也是不变的,仍然指向原来传进去时候的位置,修改的是删除段后面的元素的位置。

1、示例

#include<iostream>
#include<vector>
using namespace std;int main(void)
{vector<int>array;array.push_back(200);array.push_back(30);array.push_back(300);array.push_back(50);array.push_back(60);vector<int>::iterator itor;//删除单个元素for (itor = array.begin(); itor != array.end(); itor++){if (*itor == 300){itor = array.erase(itor);}}for (itor = array.begin(); itor != array.end(); itor++){cout << *itor << " ";}cout << endl;//删除一段元素vector<int>::const_iterator iter_begin = array.begin() + 1;vector<int>::const_iterator iter_end = array.end() - 1;array.erase(iter_begin, iter_end);for (itor = array.begin(); itor != array.end(); itor++){cout << *itor << " ";}//删除最后一个元素vector<int>::iterator iter_last = array.end() - 1;array.erase(iter_last);for (itor = array.begin(); itor != array.end(); itor++){cout << *itor << " ";}return 0;
}

2、注意

#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;

int main()
{
    vector<int>v;
    v.push_back(22);
    v.push_back(22);
    v.push_back(22);
    v.push_back(12);
    vector<int>::iterator it = v.begin();
    while( it != v.end())
    {
        if (*it == 12)
        {
            v.erase(it);//(错误)it被删除之后,it迭代器里还有东西吗?肯定没有吧,你for循环仍然使用it++,肯定会出错,要么使用erase的地方使用it++,且去除for循环里的自增操作

          //it=v.erase(it)//(正确)删除元素后,后面元素自动往前移,不用挪动指针   
        }

       else

       {
          it++;
       }
 
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

 3、给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
class Solution {
public:int removeElement(vector<int>& nums, int val) {if (nums.empty()){return 0;}vector<int>::iterator it = nums.begin();while(it!=nums.end()){if (*it == val){it=nums.erase(it);}else{it++;}}return nums.size();}
};int main()
{Solution p;vector<int>v;v.push_back(22);v.push_back(22);v.push_back(22);v.push_back(12);int len = p.removeElement(v, 22);for (int i = 0; i < len; i++){cout << v[i] << endl;}system("pause");return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW实现PCB电路板坐标定位(实战篇—2)

目录 1、项目背景 2、坐标校准原理 3、坐标校准方法 4、环境搭建 5、项目实践 1、项目背景 在机器视觉实际工程实践中&#xff0c;有时使用NI Vision定义的默认坐标系进行测量控制并不是很直接。例如&#xff0c;检测目标并不总在固定的位置出现&#xff0c;而是在ROI区域…

图像与数据类型的对应,以及如何显示

1、normalize函数 void cv::normalize(InputArry src,InputOutputArray dst,double alpha1,double beta0,int norm_typeNORM_L2,int dtype-1,InputArray marknoArry())&#xff08;1&#xff09;函数的作用 将输入图像src归一化。 注意&#xff1a;alpha、beta作为规范范围的上…

C++:字符串流

C标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能&#xff0c;即单纯性、类型安全和可扩展性。 &#xff08;PS&#xff1a;自己解释的不知道准确不&#xff1f;&#xff09; str()成员函数的使用可以让stringstream对象返回一个string字符串。 c…

力扣(LeetCode)刷题,简单+中等题(第35期)

力扣(LeetCode)定期刷题&#xff0c;每期10道题&#xff0c;业务繁重的同志可以看看我分享的思路&#xff0c;不是最高效解决方案&#xff0c;只求互相提升。 第1题&#xff1a;解码异或后的排列 试题要求如下&#xff1a; 回答&#xff08;C语言&#xff09;&#xff1a; /…

main函数的argc与argv

int main(int argc, char** argv) 1、 argc与argv的默认值&#xff08;argv相当于数组&#xff0c;尺寸由argc控制&#xff09; argc默认为1&#xff0c;因此argv的默认是argv[0]—指向程序运行时的全路径名 #include <iostream> #include <opencv2/core/core.hpp>…

C++:文件操作2 文本文件和二进制文件的读写

文件读写的步骤&#xff1a; 1、包含的头文件&#xff1a;#include <fstream>//使用文件流进行操作 2、创建流 3、打开文件(文件和流关联) 4、读写 (写操作&#xff1a;<<,put( ), write( ) 读操作&#xff1a; >> , get( ),getline( ), read( )) 5、关…

JavaScript+TensorFlow.js让你在视频中瞬间消失

最近&#xff0c;一个实时人物删除&#xff08;Real Time Person removation&#xff09;的项目在GitHub上流行起来。 这个项目的神奇之处在于&#xff0c;只需要在网页浏览器中使用JavaScript&#xff0c;并使用200多行TensorFlow.js代码&#xff0c;就能让视频屏幕中的字符和…

PCB天线无线模组如何布局摆放?

随着物联网的高速发展&#xff0c;市面上涌现出越来越多的智慧产品&#xff0c;如智能家居&#xff0c;智能交通&#xff0c;智能城市等&#xff0c;这些终端设备大都靠无线收、发模块来实现信息的传递与接收。随着市场竞争的加剧&#xff0c;硬件设备正以集成化的方向发展&…