通用的(泛型)算法 之 只读算法,写算法,排序算法

只读算法:

函数名 功能描述
accumulate 求容器里元素的和
equal 比较2个容器里的元素

写算法

函数名 功能描述
fill 用给定值,覆盖给定的范围的元素
fill_n 用给定值,覆盖给定开始位置后的,n个元素变
back_inserter 在容器末尾插入元素
copy 把容器1指定范围里的值拷贝给容器2,并返回指向容器2最后一个元素的下个元素
replace 用某个值替换掉给定范围的某个值
replace_copy 用某个值替换掉给定范围的某个值,但不改变原来的容器,把结果给新的容器

排序算法

函数名 功能描述
sort 从小到大排序
unique 把不重复的元素放在容器的前面,重复的放在后面,并返回重复部分的第一个位置
  1. include <iostream>
  2. #include <array>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <list>
  6. #include <deque>
  7. #include <numeric>
  8. #include <forward_list>
  9. using namespace std;
  10. int main(){
  11. //只读算法
  12. //1,求容器里元素的和
  13. /*
  14. forward_list<int> fl{1,2,3,4,5};
  15. //第三个参数为sum的初始值
  16. int sum = accumulate(fl.cbegin(),fl.cend(),0);
  17. cout << sum << endl;
  18. vector<string> svec{"aa","bb","cc"};
  19. string str = accumulate(svec.cbegin(),svec.cend(),string(""));
  20. //错误:const char*上没有定义+运算符
  21. //string err = accumulate(svec.cbegin(),svec.cend(),"");
  22. cout << str << endl;
  23. */
  24. //2,比较2个容器里的元素
  25. //如果把svec里放的是const char*,执行结果和string一样
  26. /*
  27. vector<string> svec{"aa","bb","cc","dd"};
  28. list<const char*> lc{"bb","cc"};
  29. //头2个参数为第一个容器的区间,第三个参数为第二个容器的首元素
  30. auto result = equal(svec.cbegin()+1,svec.cend()-1, lc.cbegin());
  31. cout << result << endl;
  32. */
  33. //写算法
  34. //1,填充fill算法
  35. /*
  36. array<int, 6> ar{1,2,3,4,5,6};
  37. cout << ar.size() << endl;
  38. //vector<int> ar{1,2,3,4,5};
  39. //把指定范围内的值变为9
  40. fill(ar.begin(),ar.begin() + ar.size()/2,9);
  41. for(auto const &s : ar){
  42. cout << s << " ";
  43. }
  44. cout << endl;
  45. cout << ar.size() << endl;
  46. */
  47. //2,填充fill_n算法
  48. /*
  49. int ir[] = {1,2,3,4,5,6};
  50. //指定位置开始,后3个元素变为9
  51. fill_n(begin(ir)+1,3,9);
  52. for(auto const &s : ir){
  53. cout << s << " ";
  54. }
  55. cout << endl;
  56. */
  57. //3,插入迭代器back_inserter
  58. //在容器末尾插入元素
  59. /*
  60. vector<int> ivec{1,0};
  61. auto it = back_inserter(ivec);
  62. fill_n(it,3,99);
  63. for(auto const &s : ivec){
  64. cout << s << " ";
  65. }
  66. cout << endl;//1,0,99,99,99
  67. */
  68. //4,copy算法
  69. /*
  70. int a1[] = {1,2,3,4,5};
  71. int a2[sizeof(a1) / sizeof(*a1)];
  72. //把a1指定范围里的值拷贝给a2,ret指向a2最后一个元素的下个元素
  73. auto ret = copy(begin(a1), end(a1), a2);
  74. //ret-1为数组a2的最后一个元素的地址
  75. *(ret-1) = 100;
  76. for(auto const &s : a2){
  77. cout << s << " ";
  78. }
  79. cout << endl;
  80. //ret和end(a2)指向同一个地址
  81. if(ret == end(a2)){
  82. cout << "true" << endl;
  83. }
  84. else{
  85. cout << "false" << endl;
  86. }
  87. */
  88. //5,replace算法
  89. /*
  90. list<int> il{1,2,2,2,5};
  91. //把范围内的2替换成23
  92. replace(il.begin(), il.end(),2,43);
  93. for(auto const &s : il){
  94. cout << s << " ";
  95. }
  96. cout << endl;
  97. list<int> ila{1,2,2,2,5};
  98. vector<int> ivec;
  99. replace_copy(ila.begin(),ila.end(),back_inserter(ivec),2,23);
  100. for(auto const &s : ivec){
  101. cout << s << " ";
  102. }
  103. cout << endl;
  104. //不改变ila
  105. for(auto const &s : ila){
  106. cout << s << " ";
  107. }
  108. cout << endl;
  109. */
  110. //重新排列算法(链表list和forward_list不支持sort)
  111. //实现删除重复的元素
  112. deque<string> sli =
  113. {"one","two","one","three","two","four","two"};
  114. for(auto const &s : sli){
  115. cout << s << " ";
  116. }
  117. cout << endl;
  118. //从小到大排序
  119. sort(sli.begin(),sli.end());
  120. for(auto const &s : sli){
  121. cout << s << " ";
  122. }
  123. cout << endl;
  124. //把有重复的元素放到末尾,并返回不重复元素的下一位置
  125. auto end_unique = unique(sli.begin(),sli.end());
  126. //删除掉重复的元素
  127. sli.erase(end_unique, sli.end());
  128. for(auto const &s : sli){
  129. cout << s << " ";
  130. }
  131. cout << endl;
  132. cout << "size: " << sli.size() << endl;//size: 4
  133. }

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 通用的(泛型)算法 之 只读算法,写算法,排序算法的更多相关文章

  1. C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法

    大多数算法都定义在<algorithm>头文件里,而标准库还在头文件<numeric>里定义了一组数值泛型算法,比如accumulate. ●  find算法,算法接受一对迭代 ...

  2. 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现

    选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...

  3. JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)

    1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...

  4. JS写的排序算法演示

    看到网上有老外写的,就拿起自已之前完成的jmgraph画图组件也写了一个.想了解jmgraph的请移步:https://github.com/jiamao/jmgraph 当前演示请查看:http:/ ...

  5. [读书笔记]算法(Sedgewick著)·第二章.初级排序算法

    本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...

  6. 《算法导论》读书笔记之排序算法—Merge Sort 归并排序算法

    自从打ACM以来也算是用归并排序了好久,现在就写一篇博客来介绍一下这个算法吧 :) 图片来自维基百科,显示了完整的归并排序过程.例如数组{38, 27, 43, 3, 9, 82, 10}. 在算法导 ...

  7. java算法03 - 常用的8种排序算法

    Java常用的八种排序算法: 插入排序 - 直接插入排序 每次将待排序的记录按照关键字的大小,插入到前面已经排好序的记录的适当位置.直到全部记录插入完成. 代码实现 /** * 直接插入排序 O(n^ ...

  8. [直观学习排序算法] 视觉直观感受若干常用排序算法 以及 iOS 资料

    http://www.zhfish.net/?s=点击范围 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则 ...

  9. Java数据结构和算法(三):常用排序算法与经典题型

    常用的八种排序算法 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中.将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列.对第四个 ...

  10. [answerer的算法课堂]简单描述4种排序算法(C语言实现)

    [answerer的算法课堂]简单描述4种排序算法(C语言实现) 这是我第一次写文章,想要记录自己的学习生活,写得不好请包涵or指导,本来想一口气写好多种,后来发现,写太多的话反而可读性不强,而且,我 ...

随机推荐

  1. python基本操作

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  2. MySQL及其图形界面navicat的安装

    数据库的第一步就是安装MySQL了,基本的安装方法都在这里,所以这里小编整理出来,一方面为了自己复习,一方面也方便大家. (关于MySQL的笔试题,具体见下面博客:http://www.cnblogs ...

  3. 2017 ACM/ICPC Asia Regional Shenyang Online(部分题解)

    HDU 6197 array array array 题意 输入n和k,表示输入n个整数和可以擦除的次数k,如果至多擦除k次能是的数组中的序列是不上升或者是不下降序列,就是魔力数组,否则不是. 解题思 ...

  4. [转]ERROR: http://rancherserver/v1 is not accessible

    本文转自:http://securityer.lofter.com/post/1d0f3ee7_10c465cc 安装rancher agent时出现以下报错 [root@localhost ~]# ...

  5. C#正则表达式。

    什么是正则表达式: 正则表达式是用来进行文本处理的技术,是语言无关的. 是由普通字符和特殊字符组成的文字模式,用来描述字符串的特征. 元字符: 1.  .    :  除 \n 以外的任意的单个字符. ...

  6. C#操作DataTable类

    一.DataTable简介 (1)构造函数 名称 说明 DataTable()  不带参数初始化DataTable 类的新实例 DataTable(string tableName) 用指定的表名初始 ...

  7. .net反编译的九款神器(转载)

    .net反编译的九款神器  转载来源: https://www.cnblogs.com/zsuxiong/p/5117465.html 本人搜集了下8款非常不错的.Net反编译利器: 1.Reflec ...

  8. JSJ—编译器与虚拟机哪个重要?

    阅读本文约“2分钟” 熟悉Java的朋友都知道虚拟机还有编译器,那么它们各自主要的功能是什么?谁比较重要呢?让我们来了解一下这两位美女的故事. 虚拟机可以说就是Java,她能让程序运行起来. 但是编译 ...

  9. sqlserver 2008R2新建数据库时报错,提示无法获得数据库"model"上的排它锁

    刚新装了个sqlserver2008 R2,在建立数据库时候报错,提示无法获得数据库"model"上的排它锁.解决办法如下: 打开查询页面,执行下面的语句即可. use maste ...

  10. Spring Boot(Spring的自动整合框架)

    Spring Boot 是一套基于Spring框架的微服务框架,由于Spring是一个轻量级的企业开发框架,主要功能就是用于整合和管理其他框架,想法是将平时主流使用到的框架的整合配置预先写好,然后通过 ...