C++ 特性之vector详解 + 联合opencv使用

C++ 特性之vector详解 + 联合opencv使用

在C++中,遍历vector并删除元素需要小心处理迭代器失效的问题。通常推荐的方法是使用迭代器进行遍历,并在需要删除元素时使用erase函数。这里给出一个示例代码,演示如何安全地遍历vector并删除特定条件的元素:

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};// 遍历vector,并删除偶数for (auto it = vec.begin(); it != vec.end(); /* 注意:不在此处增加it */ ) {if (*it % 2 == 0) {it = vec.erase(it); // erase会返回下一个有效的迭代器} else {++it; // 只有在不删除元素时才移动迭代器}}// 输出剩余的元素for (auto num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

在这里插入图片描述
在C++中,std::vector 是一种非常灵活的容器,允许你存储任意类型的动态数组。然而,std::vector 本身并不直接提供一个名为 “删除元素” 的成员函数。不过,你可以使用几种不同的方法来从 vector 中移除元素。

  1. 使用 erase 和 remove(或 remove_if)
    这是移除元素最常见的方法,它结合了算法库中的 remove(或 remove_if,如果你基于条件移除)和 vector 的 erase 成员函数。remove(或 remove_if)将需要删除的元素移动到容器的末尾,并返回一个迭代器指向新逻辑末尾(即最后一个未被移除的元素之后的位置),然后你可以使用 erase 来实际删除这些元素。
#include <vector>  
#include <algorithm> // 包含 remove 和 remove_if  std::vector<int> vec = {1, 2, 3, 4, 5, 2, 2, 7};  // 移除所有值为 2 的元素  
vec.erase(std::remove(vec.begin(), vec.end(), 2), vec.end());  // 或者,使用 lambda 表达式和 remove_if 移除所有偶数  
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i){ return i % 2 == 0; }), vec.end());
  1. 直接访问并删除
    如果你知道要删除的元素的确切位置,可以直接使用 erase 来删除它。但请注意,这只会删除一个元素,并且你需要确保索引是有效的。
std::vector<int> vec = {1, 2, 3, 4, 5};  // 假设我们要删除索引为 2 的元素(即值为 3 的元素)  
vec.erase(vec.begin() + 2);
  1. 清除整个容器
    如果你想删除容器中的所有元素,可以简单地使用 clear 成员函数。
std::vector<int> vec = {1, 2, 3, 4, 5};  
vec.clear(); // 现在 vec 是空的

注意事项
使用 erase 时,由于它会改变容器的大小并可能使迭代器失效,因此务必小心处理迭代器。在 erase 操作后,所有指向被删除元素(包括被删除元素之后的所有元素)的迭代器、指针和引用都将变得无效。
remove 和 remove_if 函数并不实际删除元素,它们只是将不需要的元素移动到容器的末尾,并返回一个迭代器指向新逻辑末尾的位置。你需要配合 erase 来实际删除这些元素。
当使用基于范围的 for 循环时,由于迭代器可能会失效,因此不适合直接在循环体中使用 erase(除非你能确保不会删除当前迭代器指向的元素)。在这种情况下,你可以考虑使用上述的 erase-remove 惯用法或使用索引进行迭代。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 家电销售展示平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

智能识别,2024年SD卡数据恢复软件的智能进化

除了手机之外现在有不少的设备还是依靠SD卡来存储数据&#xff0c;比如相机、摄像头、无人机等。有的时候会因为一些意外的情况导致数据丢失&#xff0c;那是真的丢失了吗&#xff1f;大部分情况还是可以依靠sd卡数据恢复工具来找回这些“消失”的数据哦。 1.福昕数据恢复 链…

python正则表达式以及re模块的运用完成文本处理(搜索、匹配、替换等文本操作)

1.正则表达式 正则表达式是一种强大的文本处理工具&#xff0c;用于搜索、匹配、替换等文本操作。 2.通过re模块实现正则表达式的操作 Python中的re模块是Python的标准库之一&#xff0c;它提供了对正则表达式的支持。正则表达式是一种强大的文本处理工具&#xff0c;用于搜…

AI赋能招聘:效率与公平的双重提升

一、引言&#xff1a;AI赋能招聘新纪元 在21世纪的数字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术以前所未有的速度渗透到社会经济的各个领域&#xff0c;深刻地改变着我们的生活方式与工作模式。人力资源管理&#xff0c;作为企业战略的重要组成部分&#…

[C++][opencv]基于opencv实现photoshop算法色相和饱和度调整

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 HSL.hpp #ifndef OPENCV2_PS_HSL_HPP_ #define OPENCV2_PS_HSL_HPP_#include "opencv2/core.hpp" using namespace cv;namespace cv {enum HSL_COLOR {HSL_ALL,HSL_RED,HSL_YELLOW,HSL_GREEN,HS…

在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程

前言 前段时间我们完成了七天.NET 8 操作 SQLite 入门到实战的开发系列教程&#xff0c;有不少同学留言问如何将项目发布部署到IIS上面运行。本篇文章我们就一起来讲讲在IIS上部署ASP.NET Core Web API和Blazor Wasm。 前提条件 安装.NET Core SDK https://dotnet.microsoft…

【学习笔记】Day 10

一、进度概述 1、《地震勘探原理》第三章 二、详情 3.1 野外工作概述 主要介绍地上与海上两种情况下的测量方法&#xff0c;这里不做详解&#xff0c;需要就看书。 其中简况分为&#xff1a;试验工作&#xff0c;生产工作过程&#xff0c;干扰波调查&#xff0c;干扰…

allegro PCB设计心得笔记(四) -- 显示坐标原点和更改默认产品选项

一、修改坐标原点 Allegro PCB设计过程中&#xff0c;有时需要修改坐标原点&#xff0c;但是PCB文件不显示坐标原点&#xff0c;无法确认已修改的坐标原点是否已经修改好。 显示PCB原点的设置方法如下&#xff1a; Setup -> Design Parameter Editor&#xff0c;如下图所示&…

[C++][opencv]基于opencv实现photoshop算法图像剪切

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 //图像剪切 //参数&#xff1a;src为源图像&#xff0c; dst为结果图像, rect为剪切区域 //返回值&#xff1a;返回0表示成功&#xff0c;否则返回错误代码 int imageCrop(InputArray src, OutputArray dst,…

8.3.数据库基础技术-关系代数

并&#xff1a;结果是两张表中所有记录数合并&#xff0c;相同记录只显示一次。交&#xff1a;结果是两张表中相同的记录。差&#xff1a;S1-S2,结果是S1表中有而S2表中没有的那些记录。 笛卡尔积&#xff1a;S1XS2,产生的结果包括S1和S2的所有属性列&#xff0c;并且S1中每条记…

大数据知识点

VMWare 设置网段 虚拟机设置 JDK部署 云平台 创建VPC 找到阿里云控制台里的VPC&#xff0c;点击专有网络 安全组 搁置…有需要再使用&#xff0c;因为每月要花200左右 大数据 数据导论

merfish数据进行可视化

参考博客 https://scanpy.readthedocs.io/en/stable/tutorials/spatial/basic-analysis.html example import scanpy as sc import pandas as pd import matplotlib.pyplot as plt import seaborn as snscoordinates pd.read_excel("./data/pnas.1912459116.sd15.xlsx…

分布式性能监控之SkyWalking

Apache SkyWalking 是一款开源的分布式应用性能监控和管理工具&#xff0c;旨在为微服务、云原生和容器化环境提供全面的性能分析和监控解决方案。它在分布式系统中起着关键作用&#xff0c;帮助开发者和运维人员实时监控应用程序的性能、定位问题&#xff0c;并优化系统。以下…

计算机的错误计算(六十)

摘要 用另一种方法计算计算机的错误计算&#xff08;五十五&#xff09;中案例&#xff1a;先使自变量与 取余&#xff0c;再计算取余后的余弦值&#xff0c;这时&#xff0c;得到了不同的输出。因此&#xff0c;即使不清楚正确结果&#xff0c;Python 与 Visual Studio 也各自…

加强混合工作时代的组织网络安全态势

随着组织转向采用和实施混合和远程工作模式&#xff0c;网络安全的重要性从未如此重要。虽然工作场所的这种演变提供了灵活性并有望提高生产力&#xff0c;但它也带来了组织无法忽视的无数网络安全挑战。多样化工作环境的整合需要强大的安全措施、创新的保护策略和警惕的文化&a…

Python | Leetcode Python题解之第332题重新安排行程

题目&#xff1a; 题解&#xff1a; class Solution:def findItinerary(self, tickets: List[List[str]]) -> List[str]:def dfs(curr: str):while vec[curr]:tmp heapq.heappop(vec[curr])dfs(tmp)stack.append(curr)vec collections.defaultdict(list)for depart, arri…

C++基础知识:类作为友元,以及相关代码案例

1.类作为友元&#xff0c;以及相关代码案例 #include<iostream> using namespace std;#include<string>//类做友元 class Building; class GoodGay { public:GoodGay();void visit();//参观函数 访问Building中的属性Building* building; };class Building {//加了…

从零搭建React全家桶框架教程:快速搭建react+react-router+redux项目

搭建基本的react项目 我们使用create-react-app(npm要全局安装create-react-app)快速创建一个react项目&#xff1a; npx create-react-app my-app cd my-app npm start启动成功后&#xff0c;就可以看到react的页面啦。接下来我们稍稍调整下项目的目录结构和页面内容&#xff…

Windows Server 使用Docke部署挂载问题(安装后无限重启崩溃迁移镜像到D盘打包镜像)

文章目录 前言一、问题&#xff1a;无限重启崩溃尝试&#xff1a;权限不足&#xff1f;解决&#xff1a;用Docker-Compose安装并挂载数据卷 二、问题&#xff1a;镜像磁盘默认挂载在C盘尝试&#xff1a;通过修改Docker修改镜像磁盘到D盘解决&#xff1a;通过修改docker的settin…

深度学习 —— 个人学习笔记14(ResNet、DenseNet)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 二十八、残差网络&#xff08; ResNet &#xff09; import torch import torchvision import time from torch impo…