c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)
排序算法
merge()
以下是排序和通用算法:提供元素排序策略
merge: 合并两个有序序列,存放到另一个序列。
#include<iostream>using namespace std; #include<algorithm> #include<vector>void test01() {vector<int >v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i+1);}vector<int>vTarget;vTarget.resize(v1.size() + v2.size());merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), vTarget.end(), [](int v){cout << v <<" "; }); }
sort()
sort: 以默认升序的方式重新排列指定范围内的元素。若要改排序规则,可以输入 比较函数。
void test02()
{vector<int >v1;v1.push_back(10);v1.push_back(40);v1.push_back(20);v1.push_back(90);v1.push_back(50);sort(v1.begin(), v1.end());for_each(v1.begin(), v1.end(), [](int val){cout << val << " "; });cout << endl;//从大到小sort(v1.begin(), v1.end(), greater<int>());for_each(v1.begin(), v1.end(), [](int val){cout << val << " "; });cout << endl;
}
random_shuffle()
random_shuffle: 对指定范围内的元素随机调整次序。
srand(time(0)); //设置随机种子
void test03() {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(), [](int val){cout << val << " "; });cout << endl; }
reverse()
翻转
void test04()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}reverse(v.begin(), v.end());for_each(v.begin(), v.end(), [](int val){cout << val << " "; });}
拷贝和替换算法
copy()
void test01()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}vector<int>vTarget;vTarget.resize(v.size());copy(v.begin(), v.end(), vTarget.begin());//for_each(vTarget.begin(), vTarget.end(), [](int val){cout << val << " "; });//流迭代器方式遍历copy(vTarget.begin(), vTarget.end(), ostream_iterator<int>(cout, ""));}
replace()
replace(beg,end,oldValue,newValue): 将指定范围内的所有等于oldValue的元素替 换成 newValue。
replace_if()
replace_if: 将指定范围内所有操作结果为 true 的元素用新值替换。
class MyCompare
{
public:bool operator()(int v){return v > 3;}
};
void test02()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i);}//把容器等中的3替换成300replace(v.begin(), v.end(), 3, 300);copy(v.begin(), v.end(), ostream_iterator <int>(cout, " "));cout << endl;//把容器中所有大于3的数字都替换成30000replace_if(v.begin(), v.end(), MyCompare(), 30000);copy(v.begin(), v.end(), ostream_iterator <int>(cout, " "));cout << endl;}
swap()
swap: 交换两个容器的元素
void test03()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}vector<int>v2;v2.push_back(10);v2.push_back(30);v2.push_back(20);v2.push_back(40);cout << "交换前数据:" << endl;copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));cout << endl;copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));cout << endl;cout << "交换后的数据:" << endl;swap(v1, v2);copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " "));cout << endl;copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " "));cout << endl;}
算术生成算法
accumulate()
accumulate: 对指定范围内的元素求和,然后结果再加上一个由 val 指定的初始值
#include<iostream>
#include<vector>
using namespace std;
#include<algorithm>
#include<numeric>
#include<iterator>void test01()
{vector<int>v;for (int i = 0; i <= 100; i++){v.push_back(i);}//0~100累计和 5050//第三个参数 起始累加值int sum=accumulate(v.begin(), v.end(), 0);cout << "总和为:" << sum << endl;}
fill()
fill: 将输入值赋给标志范围内的所有元素。
void test02()
{vector<int>v;v.resize(10);fill(v.begin(), v.end(),1000);copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
}
集合算法
set_union()
set_union: 构造一个有序序列,包含两个有序序列的并集。
void test02()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);//0 1 2 3 4 5 6 7 8 9v2.push_back(i + 5);// 5 6 7 8 9 10 11 12 13 14 }vector<int>vTarget;vTarget.resize(v1.size() + v2.size());vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " "));
}
vset_intersection()
set_intersection: 构造一个有序序列,包含两个有序序列的交集。
void test01()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);//0 1 2 3 4 5 6 7 8 9v2.push_back(i + 5);// 5 6 7 8 9 10 11 12 13 14 }vector<int>vTarget;vTarget.resize(min(v1.size(),v2.size()));vector<int>::iterator itEnd= set_intersection(v1.begin(), v1.end(),v2.begin(), v2.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " "));
}
set_difference()
set_difference: 构造一个有序序列,该序列保留第一个有序序列中存在而第二个有
void test03()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);//0 1 2 3 4 5 6 7 8 9v2.push_back(i + 5);// 5 6 7 8 9 10 11 12 13 14 }vector<int>vTarget;vTarget.resize(max(v1.size(), v2.size()));//v1差v2vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " "));cout << endl;//v2差v1itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());copy(vTarget.begin(), itEnd, ostream_iterator<int>(cout, " "));
}
c++中的STL的常用算法---3(排序算法,拷贝和替换算法,算术生成算法,集合算法)相关推荐
- 双月数据生成及其常见算法(二)
算法部分: 数据使用:双月数据生成及其常见算法(一)_防空洞的仓鼠的博客-CSDN博客 文章中的数据 (一)最小二乘: 理论部分: 通过矩阵求解方式,来获取最优参数.具体求解B则为我们所需要的最佳解 ...
- Java入门算法(排序篇)丨蓄力计划
本专栏已参加蓄力计划,感谢读者支持 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算法 ...
- C++STL常用算术生成算法
C++STL常用集合算法 学习目标 注意 算法简介 accumulate 功能描述 函数原型 示例 总结 fill 功能描述 函数原型 示例 总结 学习目标 掌握常用的算术生成算法 注意 算术生成算法 ...
- STL常用的集合算法
STL常用的集合算法 set_union(), set_intersection() set_difference() set_union(), set_intersection() set_diff ...
- C++ STL【常用算法】详解
大家好,欢迎来到STL[常用算法]详解模块,本文将对STL中常见但又高频的算法进行一个详细又简单的入门级教学
- python基本算法语句_Python中基本且又常用的算法
这篇文章主要学习Python常用算法,Python常用排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algo ...
- C++STL常用集合算法
C++STL常用集合算法 学习目标 算法简介 set_intersection 功能描述 函数原型 示例 总结 set_union 功能描述 函数原型 示例 总结 set_difference 功能描 ...
- C++ STL::list常用操作及底层实现(中1)——实现list常用操作之插入(insert、push_front、push_back、splice)
STL::list插入介绍及自实现插入功能 1插入数据之insert(): 1.1 `iterator insert(iterator position,const value_type & ...
- 第九层(16):STL终章——常用集合算法
文章目录 前情回顾 常用集合算法 set_intersection set_union set_difference 最后一座石碑倒下,爬塔结束 一点废话
最新文章
- phpnow 安装apache失败_装PHPnow 提示 apache 安装失败 的解决方法
- Windows消息:如何自定义窗口消息与线程消息
- LiveVideoStack线上分享第三季(九):《街舞》《长安十二时辰》背后的文娱大脑...
- 修改DNS的Linux脚本,Shell脚本-配置网络
- 清华镜像源安装 NGboost XGboost Catboost
- 【Ubuntu】VMware下Ubuntu和主机的共享文件夹
- 哈工大期末考试java_哈尔滨工业大学2019算法设计期末试题
- Leetcode 刷题笔记(二十) ——回溯算法篇之分割、子集、全排列问题
- Java基础:MySQL
- 『题解』Codeforces446C DZY Loves Fibonacci Numbers
- 上海航芯 | 智能网联汽车终端T-BOX应用方案
- VS2017超有用秘钥(亲测)
- 实现xtrabackup全量备份与全量恢复
- 使用DiskGenius拓展系统盘C盘的容量
- 35岁以后对自己职业人生的思考及一些感悟
- Ubuntu 10.04 HP LaserJet 无法打印 **** Unable to open the initial device, quitting 错误
- 硅谷中那些潜在的颠覆世界的力量
- 功利主义穆勒思维导图_浅析穆勒的功利主义思想及现实意义
- 人工神经网络分析方法,人工神经网络算法步骤
- 申报绿色工厂对企业意义