vector去除重复元素的方法是:
1.使用sort对vector排序,sort的第三个参数可以使用一个简单的布尔类型函数进行选择,正序或逆序;
2.使用unique将所有的重复元素放到末尾,返回的结果是一个迭代器类型的数据,就像vec.begin()那样。
3.erase删除重复的内容,删除的区间是左闭右开文章来源:https://www.toymoban.com/news/detail-549437.html
#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可以这样用。文章来源地址https://www.toymoban.com/news/detail-549437.html
//删除,需要保证指针链接性
for (auto it = vec.begin(); it != vec.end();) {
if (*it == 4)it = vec.erase(it);//erase函数会返回删除该位的下一位的指针
it++;
}
来自:https://blog.csdn.net/weixin_51797626/article/details/123317216
到了这里,关于vector去重方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!