#include<iostream>
#include<algorithm>
using namespace std;
// qsort调用的比较函数
// 1.参数类型必须为 const void *类型
// 2.必须有两个参数
// 3.返回类型必须是 int ,不能是 bool类型
int cmpchar(const void *a,const void *b){
char *c1 = (char *)a;
char *c2 = (char *)b;
return *c1-*c2;
}
// char[]类型qsort排序
void test_1(){
// 赋予字符数:8,实际使用 sizeof(str)/sizeof(char)计算出来的字符数是 9 ,因为包含了 '\0'
char str[]="34217856";
// 计算字符长度
int len = sizeof(str)/sizeof(char);
cout<<len<<endl;
// str[len]为 '\0',排序时不用包含
// qsort为内置函数
// 1. str 为数组首地址
// 2. len - 1 为数组有效长度
// 3. sizeof(char) 为每个元素的大小
// 4. cmp为函数指针
qsort(str,len-1,sizeof(char),cmpchar);
// 输出排序后的元素
for(int i=0;i<len;i++){
cout<<str[i]<<" ";
}
// 1 2 3 4 5 6 7 8
}
int cmpint(const void *a,const void *b){
return *(int *)a-*(int *)b;
// 以上等价于:
// int *p1 = (int *)a;
// int *p2 = (int *)b;
// return *p1-*p2;
}
// 数字类型数组qsort排序
void test_2(){
int arr[]={11,6,8,4,86,12,4,59,3,1,27,34};
qsort(arr,sizeof(arr)/sizeof(int),sizeof(int),cmpint);
cout<<endl;
for(int i=0;i<sizeof(arr)/sizeof(int);i++){
cout<<arr[i]<<" ";
}
// 1 3 4 4 6 8 11 12 27 34 59 86
}
// sort函数对数组排序
void test_3(){
// 例一: char数组排序
char cc[]="abdasbcdad";
int len = sizeof(cc)/sizeof(char);
// greater 为函数对象,指定从大到小
// less<char>(),指定从小到大,一般为默认,无需指定
sort(cc,cc+len-1,greater<char>());
cout<<cc<<endl;
// 例二: int数组排序
int arr[] = {200,100,300,900,400,12,49,200};
int len2 = sizeof(arr)/sizeof(int);
sort(arr,arr+len2);
for(int i=0;i<len2;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
// sort对迭代器排序
void test_4(){
string ss = "13452345239";
sort(ss.begin(),ss.end());
// 使用copy函数进行输出,需要添加:#include<iterator>
// ostream_iterator<char>(cout,' ')中 ' '必须要使用 " ",否则报错
copy(ss.begin(),ss.end(),ostream_iterator<char>(cout," "));
cout<<endl;
// 对排序后的字符去重
int last = unique(ss.begin(),ss.end())-ss.begin();
// 0表示起始位置,last 为字符长度
string res(ss,0,last);
cout<<res<<endl;
cout<<endl;
// 用substr可达到与上面同样的效果:
// string sa = "12345678";
// 起始位置为 5 ,长度为3
// string sb = sa.substr(5,3);
// 截取:678
// copy函数输出字符用法:
char cc[]="1234567";
int len = sizeof(cc)/sizeof(char) - 1;
// 字符数组输出
copy(cc,cc+len,ostream_iterator<char>(cout," "));
cout<<endl;
}
int main(){
// test_1();
// test_2();
// test_3();
test_4();
C++ qsort、sort函数用法
最新推荐文章于 2024-03-23 17:05:09 发布