有序向量去重,最坏时间复杂度O(n)
对于重复的元素,只保留第一个,其余的直接忽略
避免大量移动元素的操作
#include <vector>
template <typename T>
void uni(vector<T> &vec)
{
int i=0, j=0, size=vec.size();
//i记录已去重的最大元素位置
//j记录当前扫描到的元素位置
while(++j < size) //每次循环j都自增1
if(vec[i] != vec[j]) //若i、j指向的元素不等
vec[++i] = vec[j]; //先把i自增1,再把j指向的元素复制到i位置
while(--j > i)
vec.pop_back();
}