当前位置: 首页 > news >正文

【204】C++的vector删除重复元素

有些场景下 vector 中会有重复元素,而业务要求 vector 中避免出现重复元素。

我的算法如下:

  1. 获取当前 vector 的元素数量,并保存到一个 int 类型变量中。
  2. 开启一个外部循环,把 vector 从后向前循环,循环范围是最后一个到正数第二个,获取当前元素。
  3. 开启一个内部循环。从当前 vector 索引向前循环到第一个元素,获取排在前面的元素。
  4. 如果前面的元素中有和当前元素相等的,就删除当前元素,并终止内部循环。如果没有,就让内部循环继续运行直到结束。
  5. 重复第一步,直到外部循环结束。

因为在代码执行过程中,vector 的元素数量有可能变少,所以需要提前保存 vector 的元素数量。

从后向前循环,是为了保证在删除元素的时候,索引不会被影响并且能正确访问 vector 的元素。从前向后的话索引就无法保证能正确访问 vector 的元素了。

下面是以 int 整型为例自的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>int main(int argc, char** argv) {system("color 02");printf("argc=%d, argv=%s\n", argc, argv[0]);// Prepare the vector and the datas.const int LENGTH = 12;int arr[LENGTH] = { 1, 1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 7 };
//	int arr[LENGTH] = { 12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1 };std::vector<int> intVector;for (int i = 0; i < LENGTH; i++) {intVector.push_back(arr[i]);}// Print vector content.printf("Before delete repeat:\n");for (std::vector<int>::iterator it = intVector.begin(); it != intVector.end(); it++) {int item = *it;printf("%d ", item);}printf("\n");// Delete the repeat item.int size = intVector.size();for (int i = size - 1; i >= 1; i--) {int current = intVector[i];// 查找前面一个重复的元素并删除。每次只删除一个for (int j = i - 1; j >= 0; j--) {int previous = intVector[j];if (current == previous) {intVector.erase(intVector.begin() + i);// Stop the 'j' for circlej = -1;}} // end for (int j = i - 1; j >= 0; j--)}// Print vector content.printf("Print vector content:\n");for (std::vector<int>::iterator it = intVector.begin(); it != intVector.end(); it++) {int item = *it;printf("%d ", item);}printf("\nEnd.\n");return 0;
}
http://www.lryc.cn/news/442387.html

相关文章:

  • 模型案例:| 行李检测模型!
  • 【PostgreSQL】PostgreSQL SQL语句整理:掌握核心技能
  • 电风扇制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • Zookeeper安装使用教程
  • Linux C# DAY3
  • Pycharm中虚拟环境依赖路径修改
  • 可视化数据分析收集软件Splunk Enterprise for Mac
  • 极狐GitLab CI/CD 功能合集(超详细教程)
  • ubuntu安装SFML库+QT使用SFML库播放声音
  • 【AI视频】Runway:Gen-2 图文生视频与运动模式详解
  • GPIO 理解(基本功能、模拟案例)
  • LeetCode_sql_day30(1264.页面推荐)
  • mysql通过binlog做数据恢复
  • macos清理垃圾桶时提示 “操作无法完成,因为该项目正在使用中” 解决方法 , 强制清理mac废纸篓 方法
  • vue3 axios ant-design-vue cdn的方式使用
  • neo4j导入csv数据
  • YOLOV8实现小目标检测
  • 解决 Prettier ESLint 错误
  • 百度网盘企业版数据快速上云,数据流转平台 CloudFlow 加速大模型训练迭代
  • 地面站通过SSH连接无人机
  • 【Pytorch】大语言模型中的CrossEntropyLoss
  • 安全热点问题
  • C++——用选择法对10个数值进行排序。
  • CSP-CCF★★★201909-2小明种苹果(续)★★★
  • 硬件工程师笔试面试——变压器
  • Visual Studio Code( VS Code)倍速提高编程工作效率的免费的源代码编辑器
  • 华为SMU02B1智能通信电源监控单元模块简介
  • 【刷题日记】15. 三数之和
  • 低级编程语言和高级编程语言
  • Spring Boot-API网关问题