如何简单删除vector中的重复int值,不使用指针等复杂操作?
原代码错误分析
- 无效判断:
temp本身就是通过duplicatedVector.at(i)赋值得到的,后续判断temp == duplicatedVector.at(i)永远为真,没有任何实际作用 - 计数器逻辑错误:
counter变量定义在for循环内部,每次循环都会被重置为0,所以计数器最多只能累计到1,永远触发不了counter > 1的判断条件 - 核心去重逻辑缺失:你没有判断当前遍历到的元素是否已经出现过,也没有符合需求的入队逻辑,现有逻辑和「保留元素第一次出现、删除后续重复项」的要求完全不匹配
简单实现方案
不需要用到指针、迭代器等复杂语法,仅用基础循环和布尔变量即可实现,核心逻辑是:遍历原数组的每个元素,先检查该元素是否已经被存入去重数组,如果没有就加入,已存在则直接跳过。
示例代码如下:
for(int i = 0; i < duplicatedVector.size(); i++) { int current = duplicatedVector.at(i); // 标记当前元素是否已经存在于去重数组中 bool alreadyExist = false; // 遍历去重数组检查重复 for(int j = 0; j < deduplicatedVector.size(); j++) { if(deduplicatedVector.at(j) == current) { alreadyExist = true; break; } } // 仅从未出现过的元素才加入去重数组 if(!alreadyExist) { deduplicatedVector.push_back(current); } }
执行后deduplicatedVector就会得到你预期的1、2、4结果,且元素顺序和原数组第一次出现的顺序完全一致。
内容的提问来源于stack exchange,提问作者user16902807
相关产品推荐
相关产品推荐

