C++STL中sort(),unique(),unique_copy()的使用

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值