You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用指定方法实现无序vector去重并保留元素顺序?

C++ Vector 去重(保留元素顺序,仅用指定方法)

原代码问题分析

你当前的代码存在几个核心逻辑错误:

  1. 内层循环遍历原vector而非临时容器,判断逻辑颠倒——只要找到原vector中任意两个元素相等就添加,导致重复元素被多次插入tempVec
  2. 内层循环j从1开始,跳过了原vector的第一个元素,导致初始元素无法被正确加入临时容器
  3. 最终没有将去重后的tempVec内容同步回传入的原vector,原容器不会发生任何变化

修改后的实现代码

void RemoveDuplicates(std::vector<int>& vec) 
{
    std::vector<int> tempVec; 

    // 遍历原vector的每一个元素
    for (int i = 0; i < vec.size(); ++i)
    {
        bool isDuplicate = false;
        // 检查当前元素是否已存在于去重后的临时容器中
        for (int j = 0; j < tempVec.size(); ++j)
        {
            if (vec.at(i) == tempVec.at(j))
            {
                isDuplicate = true;
                break; // 找到重复后立即终止内层循环,减少不必要遍历
            }
        }
        // 仅当元素未重复时,加入临时容器
        if (!isDuplicate)
        {
            tempVec.push_back(vec.at(i));
        }
    }

    // 将原vector替换为去重后的内容
    vec.resize(tempVec.size());
    for (int k = 0; k < tempVec.size(); ++k)
    {
        vec.at(k) = tempVec.at(k);
    }
}

代码说明

  1. 去重逻辑:对原vector的每个元素,遍历已去重的tempVec,确认该元素未被添加过再插入tempVec,确保只保留首次出现的元素
  2. 容器同步:通过resize()调整原vector的大小与tempVec一致,再用at()逐个赋值,完成原容器的更新
  3. 优化细节:找到重复元素后立即跳出内层循环,避免无效遍历

测试验证

当输入序列为1 2 3 3时:

  • 元素1:tempVec为空,直接添加,tempVec变为[1]
  • 元素2:遍历tempVec无匹配,添加后变为[1,2]
  • 元素3:遍历tempVec无匹配,添加后变为[1,2,3]
  • 元素3:遍历tempVec找到匹配,跳过添加
  • 最终原vector被更新为[1,2,3],符合预期

内容的提问来源于stack exchange,提问作者user20015647

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:10:28