gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:03:36 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com