unique()函数作用:剔除相邻元素。剔除原理:看当前字符与他前一个字符是否相同,如果相同就剔除当前字符,如果不同就跳转到下一个字符
unqiue_copy()函数作用:剔除相邻元素,并复制到他处。
//1.直接输出
string str = "acttacct";
vector<char> vecch(str.begin(), str.end()); //根据迭代器的起始位置和终止位置来定初始化一个容器
vector<char>::iterator it = vecch.begin();
for (; it != vecch.end(); ++it)
{
cout << *it;
}
cout << endl;
//输出:
//acttacct
//2.剔除相邻重复元素,但字符串长度不变,删除的元素会在填充不确定字符
string str = "acttacct";
unique(str.begin(), str.end());
cout << "str=" << str<<endl; //输出"actactXX",X代表的是不确定的字符,unique函数的返回值是一个迭代器类型,指向的是第一个X所处的位置
//输出:
//str=actactct
//3.将字符串排序后再删除
string str = "acttacct";
sort(str.begin(), str.end());
str.erase(unique(str.begin(), str.end()), str.end());//str.end()返回的迭代器指向第二个X位置的后面一个位置,调用str.erase()后就把后两个不确定的字符XX删除掉
cout << "str=" << str << endl;
//输出:
//str=act
//4.将获取的字符存储在一个额外的变量中
string str = "acttacct";
string str1;
str1.resize(str.size());
sort(str.begin(), str.end());
str1.resize(unique_copy(str.begin(), str.end(), str1.begin()) - str1.begin());
cout << "str1=" << str1 << endl;
//输出:
//str1=act
//5.返回去重后的数组长度
int num[10] = { 1, 2, 2, 2, 2, 3, 4, 4, 5, 5 };
int ans = unique(num, num + 10) - num;//unique返回指向索引为5的元素,num指向索引为0的元素
cout << "ans= " << ans << endl;
cout << "num[10]="<<endl;
for (int i = 0;i<sizeof(num)/sizeof(num[0]);i++)
{
cout << num[i] <<' ';
}
cout << endl;
//输出:
//ans= 5
//num[10]=
//1 2 3 4 5 3 4 4 5 5