标签:
unique 与 unique_copy 属于C++的STL模板,头文件是 algorithm
去除重复的 相邻的 重复的元素,即如果两个元素 相同 但是 不相邻,则不会去除
unique 将重复的元素没有删除,而是放在了最后面,故原来是多少元素,去重后还是多少元素,保存了剔除的元素
unique_copy 是将去重后的元素重新放到另外一个数组去,没有保存剔除的元素
故通常用前,先将数组排序
unique(begin, end) ,begin 是开始位置,end 是结束的位置,返回一个地址,
unique_copy(begin, end, tar_begin), begin是原数组的开始地址,end原数组的结束地址,tar_begin是要复制到的数组的即目标数组的开始地址,同样返回一个地址
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; ll k, p; int main () { int a[] = {1, 2, 2, 2, 3, 3, 4, 5, 5, 3}; int b[] = {1, 2, 2, 2, 3, 3, 4, 5, 5, 3}; int len = unique(a, a+10) - a; printf("unique\nlen = %d\n", len); for(int i = 0; i < 10; i++) { if(i == len) puts("##"); printf("%d ", a[i]); } printf("\n下面是unique_copy\n"); int c[10]; int d = unique_copy(b, b+10, c) - c; printf("len = %d\n", d); for(int i = 0; i < 10; i++) { printf("%d ", c[i]); } printf("\n"); return 0;
输出为:
unique
len = 5
1 2 3 4 5 3 ## // 最后输出的3是因为和他相邻的没有3
4 5 5 3 // 说明没有删除,只是放在后面而已
下面是unique_copy
len = 6
1 2 3 4 5 3 2004323541 667813577 -2 2004226402 //说明删除了,因为后面是随机数嘛
C++中的unique(),unique_copy()的用法
标签:
原文地址:http://www.cnblogs.com/tenlee/p/4658682.html