【c++】vector中删除元素

article/2025/9/2 16:54:16

目录

    • 1.删除指定范围的元素
    • 2.删除指定大小的元素
    • 3.C++20 std::erase, std::erase_if (std::vector)
    • 注意点

1.删除指定范围的元素

  1. vector删除元素之pop_back(),erase(),remove()
  • 向量容器vector的成员函数pop_back()可以删除最后一个元素.

  • 而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。

  • 还可以采用通用算法remove()来删除vector容器中的元素.

  • 不同的是:采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。

  1. C++ STL vector删除元素的几种方式(超级详细)(推荐!!!)
    在这里插入图片描述
    示例看上面的链接。

2.删除指定大小的元素

1. 方法一:
由于上面的删除方法都是只能删除指定的迭代器指定的位置元素,所以如果需要删除指定大小的元素则需要先找到其迭代器,不同于map(map有find方法),vector本身是没有find这一方法,其find是依靠algorithm来实现的。
给个例子:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{vector<int> vec;for(int i=0;i<10;i++){vec.push_back(i);}for(int i=0;i<vec.size();i++){cout << vec[i] <<' ';}cout<<endl;vector<int>::iterator it = find(vec.begin(), vec.end(), 2);// vec.erase(vec.begin()+5);//erase the 6th elementvec.erase(it);for(int i=0;i<vec.size();i++){cout << vec[i] << ' ';}cout<<endl;return 0;
}

运行结果:

0 1 2 3 4 5 6 7 8 9 
0 1 3 4 5 6 7 8 9 
  1. 方法二:
    摘抄自:对vector删除元素的效率比较
    最近在看github上的开源代码,看到了vector删除元素的操作,如(1)所示
    (1)、先用swap把要删除的元素和vector里最后一个元素交换位置,然后把最后一个元素pop_back
    std::swap(*it, observers_.back());
    observers_.pop_back();
    
    我平时删除vector上的元素跟(2)是一样的
    (2)、先用find查找元素,然后用erase删除元素
    Iterator it = std::find(observers_.begin(), observers_.end(), x);
    observers_.erase(it);
    
    1的效率高,2删除元素后需要把后面的元素依次向前移动,但有时会要求不能改变vector中元素顺序,此时只能使用2

3.C++20 std::erase, std::erase_if (std::vector)

std::erase, std::erase_if (std::vector)中给了解释和例子。

注意点

  1. erase()方法遍历删除某些元素迭代器失效问题、及删除最后一个元素迭代器失效问题)
    参考:https://blog.csdn.net/Wmll1234567/article/details/112546439

给一个例子:

template<typename T = int>
bool remove_array(std::vector<T> &array, T v){typename std::vector<T>::iterator it = std::find(array.begin(), array.end(), v);if(it == array.end()){return false;}std::swap(*it, array.back());array.pop_back();return true;
}
void test_delete_in_vector() {// 例1std::vector<int> array;array.push_back(26);remove_array(array, 26);for (auto v : array) {std::cout << "array: " << v << std::endl;}// 例2std::vector<int> test_vec;for(int i = 0; i < 10; i++) {test_vec.emplace_back(i);}auto iter= test_vec.begin();while(iter!=test_vec.end()) {if((*iter) % 2 == 1) {iter = test_vec.erase(iter); // 如果删除的是最后一个元素,则返回的是迭代器为空,所以不能++} else {++iter;}}for (auto v : test_vec) {std::cout << v << std::endl;}
}

http://chatgpt.dhexx.cn/article/HfS7XDqr.shtml

相关文章

光纤光学原理相关基础知识点

记&#xff1a;研究生导师的方向是光纤光学和机器学习交叉的&#xff0c;导师给推荐了本书&#xff0c;书里面的理论和推导公式作为小白的我真的是不太行&#xff0c;后来在中国大学mooc上找了视频课跟着学习&#xff0c;顺便做下笔记&#xff0c;为日后使用&#xff0c;因此会…

机器人学重点知识点总结

机器人学重点知识点总结 坐标转换与机械臂运动学雅克比矩阵机械臂逆向动力学&#xff08;牛顿欧拉递推&#xff09;机械臂正向动力学运动轨迹生成动力学轨迹跟踪控制 这篇博客主要用来记录一下现代机器人学里面比较基础也比较重要的一些知识点&#xff0c;所有内容均仅仅记录是…

大学物理(下)知识点总结

大学物理&#xff08;下&#xff09;知识点总结&#xff08;持续更新&#xff09; 文章目录 大学物理&#xff08;下&#xff09;知识点总结&#xff08;持续更新&#xff09;静电场知识点总结习题精选 磁场知识点总结习题精选 期中复习总结电磁场知识点总结习题精选 狭义相对论…

Lumerical官方案例、FDTD时域有限差分法仿真学习(二)——宽带光栅耦合器(Broadband grating coupler (2D))

这个 2D FDTD 示例展示了如何获得光栅耦合器的宽带特性&#xff0c;并将结果与实验数据进行比较。 此外&#xff0c;该应用示例演示了多频波束计算的正确使用和优势&#xff0c;并将结果与标准单频波束计算进行了比较。 要更好地了解单频和多频波束计算之间的差异&#xff0c;请…

三维计算机视觉(四)--关键点

关键点又称为感兴趣的点&#xff0c;是低层次视觉通往高层次视觉的捷径&#xff0c;抑或是高层次感知对低层次处理手段的妥协。 RangeImage 1.关键点&#xff0c;线&#xff0c;面 关键点特征点&#xff1b; 关键线边缘&#xff1b; 关键面foreground&#xff1b; 上述三个概…

信号完整性基础04:串扰(1)

说在开头&#xff1a;关于x射线&#xff08;2&#xff09; 1895年11月8日&#xff0c;德国维尔茨堡大学的一间实验室里&#xff0c;校长伦琴正在做克鲁克斯管实验&#xff0c;当时房间没开灯&#xff0c;屋子里一片漆黑&#xff0c;放电管用黑纸包得很严实&#xff0c;他突然发…

基于地平面的单目视觉里程计绝对尺度估计

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 ●论文摘要 对于基于单目相机的系统来说&#xff0c;从单目相机中恢复绝对度量尺度是一个具有挑战性的问题。利用有限的已知条件&#xff0c;提出了多种尺度估计方法&#xff0c;如根据相机的高度、物体大小等…

comsol 学习笔记【基础知识,磁场与结构场耦合为主】

感悟 随时补充学习中的感悟&#xff0c;放在开头是为了后来者在学习过程中有所参考。 掌握基本操作&#xff0c;学会寻找资料先看基础视频&#xff0c;然后找专题视频&#xff0c;再去学习案例&#xff08;以官方视频优先、案例配有相关的文件&#xff09;学习案例会涉及到其…

硬件工程师面试基础知识点

目录 一、晶振电路 二、LDO选型 1.LDO工作原理 2.输入电压 3.效率 4.功耗 5.电源抑制比PSRR 6.线性调整率 Line Regulation 7.负载调节率 (Load Regulation) 8.静态电流 9.噪声 10.输出电容器 11.反向泄漏保护 12.RF、音频的应用 三、DC-DC 1.降压转换器-Buck…

PCL—关键点检测(NARF)低层次点云处理

博客转载自&#xff1a;http://www.cnblogs.com/ironstark/p/5051533.html 关键点检测本质上来说&#xff0c;并不是一个独立的部分&#xff0c;它往往和特征描述联系在一起&#xff0c;再将特征描述和识别、寻物联系在一起。关键点检测可以说是通往高层次视觉的重要基础。但本…

HFSS----环形定向耦合器的设计实例

1:设置终端求解类型 2&#xff1a;创建物体模型 设置单位 设置一个变量表示传输线终端到圆心的距离 添加新的介质材料 创建正多边体 创建完成以后 可以通过“ctrlD”全屏显示 创建环形带状线 创建矩形面 通过复制生成其他3根传输线 创建圆面 合并圆面和4个传输线 在生成一个圆…

<论文阅读> RF-LIO:高动态环境中首先移除动态点的紧耦合激光雷达惯性里程计

继续在家读文献&#xff5e; 希望下周能继续打工&#xff0c;最近还是更多的关注激光里程计相关的方向。 论文地址&#xff1a;Removal-First Tightly-coupled Lidar Inertial Odometry in High Dynamic Environments 摘要&#xff1a;同步定位和建图&#xff08;SLAM&#x…

差分信号,差分对和耦合(二)——差分阻抗计算、差分对中的回流分布

耦合对差分阻抗的影响最大不超过12%&#xff0c;在走线靠得更近的过程中&#xff0c;由于耦合原因差分阻抗开始降低&#xff0c;这时&#xff0c;可以从以下五个方面分析&#xff1a; 1. 使用近似值的直接结果。 2. 使用场求解器的直接结果。 3. 使用基于模式的分析。 4. 使用…

雷达原理 知识点汇总

持续更新中… 雷达原理知识点汇总 第一章 绪论 1、雷达概念(Radar)&#xff1a; radar的音译&#xff0c;“Radio Detection and Ranging ”的缩写。原意是“无线电探测和测距”&#xff0c;即用无线电方法发现目标并测定它们在空间的位置。 2、雷达工作原理&#xff1a; …

短距离无线通信设备的天线设计

无线射频模块可实现的通信范围不仅仅取决于输出功率和接收器灵敏度&#xff0c;还取决于天线解决方案。了解不同的天线特性&#xff0c;以便为特定应用选择最合适的天线是非常重要的学问。 在短距离无线通信等低功率无线应用中&#xff0c;天线选择的关键要素是尺寸要求、辐射性…

GR-Fusion:强鲁棒低漂移的多传感器融合系统(IROS2021)

来源&#xff1a;GR-Fusion Multi-Sensor Fusion SLAM for Ground Robots with High Robustness and Low Drift IROS 2021 单位&#xff1a;中科院沈阳自动化研究所 针对问题&#xff1a; 针对地面机器人的多传感器融合SLAM系统 提出方法&#xff1a; 系统融合紧耦合IMU、轮速计…

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(六)变压器耦合栅极驱动

变压器耦合栅极驱动 1.单端变压器耦合栅极驱动电路 2.双端变压器耦合栅极驱动 在高电压栅极驱动 IC 出现以前&#xff0c;使用栅极驱动变压器是唯一一种在离线或类似高电压电路中驱动高侧开关的可行解决方案。 现在&#xff0c;两种解决方案同时存在并且各有利弊&#xff0c;…

雷达多普勒频率计算公式_使用MATLAB工具箱进行雷达信号回波仿真

这篇文章的前提条件是在大家已经清楚整个雷达仿真的基本原理并且能自己熟练的根据公式写出雷达信号仿真的距离和相位变化信息。如果这里概念不清楚,请看这 qwe14789cn:雷达信号仿真的基本原理——时延与相位的变化​zhuanlan.zhihu.com 如果你能够熟练的完成上述要求,那么今…

loam框架的注意点,公式推导细节,lego-loam对其的改进及自身不足,

目录 前端流程及注意细节&#xff1a; 总体结构&#xff1a; 特征提取部分&#xff1a; 特征关联匹配部分&#xff1a; 最小二乘优化部分&#xff1a; 后端部分&#xff1a; lego-loam对其的改进&#xff1a; 前端流程及注意细节&#xff1a; 总体结构&#xff1a; 1.激…

神经元振荡中相位幅值耦合的量化:锁相值、平均向量长度、调制指数和广义线性模型交叉频率耦合

相位振幅耦合是研究脑电和脑磁图中认知过程的一个很有前途的方法。由于概念新颖&#xff0c;文献中采用了多种方法来计算相幅耦合。本文利用模拟数据对锁相值(PLV)、平均向量长度(MVL)和调制指数(MI)这三种最常用的相幅耦合测量方法和广义线性模型交叉频率耦合(GLM-CFC)方法的性…