• 【C++编程语言】之STL常用算法之 排序算法 sort()函数 random_shuffle()函数 merge()函数 reverse()函数


    1.常用排序算法

    算法简介

    • sort 对容器内元素进行排序
    • random_shuffle 洗牌 指定范围内的元素随机调整次序
    • merge 容器元素合并 并存储到另一容器中
    • reverse 反转指定范围的元素
    2.sort 排序算法
    /*
    	函数原型:
    		sort(iterator beg , iterator end ,_pred);
    		按照从小到大的顺序排列顺序
    		beg  开始迭代器
    		end  结束迭代器
    		_pred 谓词
    
    */
    //提供谓词
    class Greater20 {
    public:
    	bool operator()(int val,int val2) {
    		return val > val2;
    	}
    };
    //打印函数
    void myPrint(int val) {
    	cout << val << " ";
    }
    void test01() {
    
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(40);
    	v.push_back(30);
    	v.push_back(40);
    	v.push_back(20);
    	v.push_back(40);
    
    	//利用sort进行升序
    	sort(v.begin(), v.end());
    	for_each(v.begin(), v.end(), myPrint);
    
    	cout << endl;
    
    	//利用sort进行降序
    	sort(v.begin(), v.end(), Greater20());
    	for_each(v.begin(), v.end(), myPrint);
    	
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    3.random_shuffle 指定范围内的元素随机调整次序
    /*
    	函数原型:
    		random_shuffle(iterator beg , iterator end );
    		指定范围内的元素随机调整次序
    		beg  开始迭代器
    		end  结束迭代器
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    void test01() {
    
    	//虽然打乱了,但是每次启动后大乱顺序都一样
    	//如果想要每次打乱顺序不同需要加上 随机数种子
    	srand((unsigned int)time(NULL));
    
    	vector<int> v;
    	for (int i = 0; i < 10; i++) {
    		v.push_back(i);
    	}
    
    	//利用洗牌算法 打乱顺序
    	random_shuffle(v.begin(), v.end());
    	for_each(v.begin(), v.end(), myPrint);
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    4.merge 两个容器元素合并,并存储到另一个容器中
    /*
    	函数原型:
    		merge(iterator beg1 , iterator end1,iterator beg2,iterator end2,iterator dest );
    		容器元素合并,并存储到另一个容器中
    		注意:两个容器必须是有序的
    		beg1  容器1开始迭代器
    		end1  容器1结束迭代器
    		beg2  容器2开始迭代器
    		end2  容器2结束迭代器
    		dest  目标容器开始迭代器
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    void test01() {
    
    	//开始容器 v1  v2
    	vector<int> v1;
    	vector<int> v2;
    	for (int i = 0; i < 10; i++) {
    		v1.push_back(i);
    		v2.push_back(i+1);
    	}
    
    	//目标容器
    	vector<int> dest;
    	//目标容器没有指定空间   如果忘记会产生报错
    	dest.resize(v1.size() + v2.size());
    	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), dest.begin());
    	for_each(dest.begin(), dest.end(), myPrint);
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    5.reverse 将容器内元素进行反转
    /*
    	函数原型:
    		reverse(iterator beg ,iterator end);
    		反转指定范围的元素
    		beg  开始迭代器
    		end  结束迭代器
    */
    void myPrint(int val) {
    	cout<<val<<" ";
    }
    void test01() {
    
    	vector<int> v;
    	v.push_back(10);
    	v.push_back(30);
    	v.push_back(50);
    	v.push_back(20);
    	v.push_back(40);
    
    	cout << "反转前" << endl;
    	for_each(v.begin(), v.end(), myPrint);
    	cout << endl;
    
    	cout << "反转后" << endl;
    	reverse(v.begin(), v.end());
    	for_each(v.begin(), v.end(), myPrint);
    }
    int main() {
    	test01();
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    鸿蒙跨包跳转页面-HSP页面路由
    SpringBoot+Vue的社区疫情防控管理系统|基于Python+Django的社区物资采购系统
    微服务之流控、容错组件sentinel
    cocoaPods源码之从入口Pod学起
    4.03 用户中心-订单管理功能开发
    第五站:操作符(第二幕)
    四、nginx反向代理
    Python内置库pathlib
    Spring Bean的生命周期
    大唐杯在仿真时出现的问题,是里面的参数配置有问题吗,还是别的方面出现了问题,求指导
  • 原文地址:https://blog.csdn.net/kaszxc/article/details/127709108