排序算法

merge()

  1. 以下是排序和通用算法:提供元素排序策略

  2. 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()

  1. random_shuffle: 对指定范围内的元素随机调整次序。

  2. 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(排序算法,拷贝和替换算法,算术生成算法,集合算法)相关推荐

  1. 双月数据生成及其常见算法(二)

    算法部分: 数据使用:双月数据生成及其常见算法(一)_防空洞的仓鼠的博客-CSDN博客  文章中的数据 (一)最小二乘: 理论部分: 通过矩阵求解方式,来获取最优参数.具体求解B则为我们所需要的最佳解 ...

  2. Java入门算法(排序篇)丨蓄力计划

    本专栏已参加蓄力计划,感谢读者支持 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算法 ...

  3. C++STL常用算术生成算法

    C++STL常用集合算法 学习目标 注意 算法简介 accumulate 功能描述 函数原型 示例 总结 fill 功能描述 函数原型 示例 总结 学习目标 掌握常用的算术生成算法 注意 算术生成算法 ...

  4. STL常用的集合算法

    STL常用的集合算法 set_union(), set_intersection() set_difference() set_union(), set_intersection() set_diff ...

  5. C++ STL【常用算法】详解

    大家好,欢迎来到STL[常用算法]详解模块,本文将对STL中常见但又高频的算法进行一个详细又简单的入门级教学

  6. python基本算法语句_Python中基本且又常用的算法

    这篇文章主要学习Python常用算法,Python常用排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algo ...

  7. C++STL常用集合算法

    C++STL常用集合算法 学习目标 算法简介 set_intersection 功能描述 函数原型 示例 总结 set_union 功能描述 函数原型 示例 总结 set_difference 功能描 ...

  8. C++ STL::list常用操作及底层实现(中1)——实现list常用操作之插入(insert、push_front、push_back、splice)

    STL::list插入介绍及自实现插入功能 1插入数据之insert(): 1.1 `iterator insert(iterator position,const value_type & ...

  9. 第九层(16):STL终章——常用集合算法

    文章目录 前情回顾 常用集合算法 set_intersection set_union set_difference 最后一座石碑倒下,爬塔结束 一点废话

最新文章

  1. phpnow 安装apache失败_装PHPnow 提示 apache 安装失败 的解决方法
  2. Windows消息:如何自定义窗口消息与线程消息
  3. LiveVideoStack线上分享第三季(九):《街舞》《长安十二时辰》背后的文娱大脑...
  4. 修改DNS的Linux脚本,Shell脚本-配置网络
  5. 清华镜像源安装 NGboost XGboost Catboost
  6. 【Ubuntu】VMware下Ubuntu和主机的共享文件夹
  7. 哈工大期末考试java_哈尔滨工业大学2019算法设计期末试题
  8. Leetcode 刷题笔记(二十) ——回溯算法篇之分割、子集、全排列问题
  9. Java基础:MySQL
  10. 『题解』Codeforces446C DZY Loves Fibonacci Numbers
  11. 上海航芯 | 智能网联汽车终端T-BOX应用方案
  12. VS2017超有用秘钥(亲测)
  13. 实现xtrabackup全量备份与全量恢复
  14. 使用DiskGenius拓展系统盘C盘的容量
  15. 35岁以后对自己职业人生的思考及一些感悟
  16. Ubuntu 10.04 HP LaserJet 无法打印 **** Unable to open the initial device, quitting 错误
  17. 硅谷中那些潜在的颠覆世界的力量
  18. 功利主义穆勒思维导图_浅析穆勒的功利主义思想及现实意义
  19. 人工神经网络分析方法,人工神经网络算法步骤
  20. 申报绿色工厂对企业意义

热门文章

  1. 一个页面同时发起多个ajax请求,会出现阻塞情况
  2. linux里的进程简介
  3. 敏捷自动化测试(1)—— 我们的测试为什么不够敏捷?
  4. Oracle转Sqlserver 记录
  5. 谈谈C#的私有成员的一个有趣的现象!
  6. 晚上答辩的理论知识准备
  7. 查询分析器下如何备份数据库
  8. mysql重做日志_MySQL-重做日志 redo log -原理
  9. c 语言输出指针的值,C 语言指针
  10. 小程序点击调转带参数_带你走遍苏大的每个角落,校园导览小程序上线!