c++ - 如何删除排序 vector 中的重复项

标签 c++ sorting stdvector

我目前有一个vector<int> c,其中包含{1,2,2,4,5,5,6}我想删除重复的数字,以便c将具有{1,4,6}。互联网上的许多解决方案似乎只是删除重复项之一,但我正在尝试删除所有出现的重复数。
假设c始终被排序。
我目前有

#include <iostream>
#include <vector>

int main() {
  vector<int> c{1,2,2,4,5,5,6};
  for (int i = 0; i < c.size()-1; i++) {
    for (int j=1; j<c.size();j++){
      if(c[i] == c[j]){
         // delete i and j? 
      }
    }
  }
}
我尝试使用两个for循环,以便可以比较当前元素和下一个元素。这就是我的疑问所在。我不确定我是否正确解决了这个问题。
我可以寻求有关如何解决我的问题的帮助吗?

最佳答案

该代码基于以下洞察力:只有当且仅当元素与其紧邻的两个元素都不相同时,排序列表中的元素才是唯一的(起始和结束元素除外,每个元素都与一个元素相邻)。这是正确的,因为所有相同的元素必须在排序数组中相邻。

void keep_unique(vector <int> &v){
    if(v.size() < 2){return;}

    vector <int> unique;

    // check the first element individually
    if(v[0] != v[1]){
        unique.push_back(v[0]);
    }

    for(unsigned int i = 1; i < v.size()-1; ++i){
        if(v[i] != v[i-1] && v[i] != v[i+1]){
            unique.push_back(v[i]);
        }
    }

    // check the last item individually
    if(v[v.size()-1] != v[v.size()-2]){
        unique.push_back(v[v.size()-1]);
    }

    v = unique;
}

关于c++ - 如何删除排序 vector 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65328871/

相关文章:

c++ - 如何在不复制的情况下从 C 数组构造 std::vector 或 boost::array?

c++ - 根据赋值实例化模板函数

c++ - 从 C++ 中的函数返回引用的推荐方法

php - 按 W/YYYY 日期格式排序

java - 基于两列对大文件进行排序

c++ - std::vector 内存分配问题

c++ - 如何获取指向 std::vector 的最后插入元素的指针?

c++ - Bison 中无用的规则

c++ - 为什么会出现错误 "no matching function for call to ' A(A<...auto...> )'"?

python - 排序导入的文本文件?