我目前有一个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/