vector去重方法

本文介绍了如何在C++中通过sort、unique和erase三个步骤删除vector中的重复元素。首先,使用sort对vector进行排序,然后利用unique函数将重复元素集中到末尾,最后通过erase删除这些重复项。同时,文中还展示了如何在迭代过程中删除特定值(如4)的元素。这是一个关于C++数据结构和算法实践的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector去除重复元素的方法是:
1.使用sort对vector排序,sort的第三个参数可以使用一个简单的布尔类型函数进行选择,正序或逆序;
2.使用unique将所有的重复元素放到末尾,返回的结果是一个迭代器类型的数据,就像vec.begin()那样。
3.erase删除重复的内容,删除的区间是左闭右开

#include<bits/stdc++.h>
using namespace std;

bool cmp(int a,int b){
	return a>b; //这里决定是逆序排列
}
//iterator 迭代内容 
//unique 重复元素放到最后 
//erase 删除区间内容 
int main(){
	vector <int> vec;
	vector <int>::iterator it;
	for(int i=0;i<6;i++){
		vec.push_back(i);
	}
	vec.push_back(5);
	vec.push_back(4);
	sort(vec.begin(),vec.end());
	it=unique(vec.begin(),vec.end());  //”删除”序列中所有相邻的重复元素(只保留一个)。
	//此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了 
	
	//unique的返回值是重复元素的第一项 
	vec.erase(it,vec.end()); //删除左闭右开的区间内的东西 
	for(auto e:vec){
		printf("%d ",e);
	}
} 

学到的新内容:
1.使用 vector ::iterator it; 这个语句可以定义一个int类型的迭代器数据格式,用来作为一个迭代类型的变量。
2.auto double a;如果忽略double 默认是int。在for循环的格式中,auto 的变量类型是根据冒号后面的内容类型决定。
疑惑:
auto在for循环中可以定义一个变量,进行迭代。但是不明白其真正用法,如下代码中,不理解为什么auto可以这样用。

//删除,需要保证指针链接性
for (auto it = vec.begin(); it != vec.end();) {
	if (*it == 4)it = vec.erase(it);//erase函数会返回删除该位的下一位的指针
	it++;
}
来自:https://blog.youkuaiyun.com/weixin_51797626/article/details/123317216
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值