文章目录

  • 一、STL库中算法的种类及简介
  • 二、STL库中各算法的主要操作
    • 1.非修正算法
    • 2.修正算法
    • 3.排序查找算法
    • 4.数值算法
  • 总结

一、STL库中算法的种类及简介

1.非修正算法 : 不直接修改其所操作的容器内容的算法。
2.修正算法 : 可以修改它们所操作的容器内容的算法。
3.排序查找算法 : 包括对序列进行排序和合并的算法,搜索算法以及有序序列上的集合操作。
4.数值算法 : 对容器内进行数值计算。

算法的实现主要包括以下头文件:algorithm , numeric , functional。同时算法的实现主要依赖于迭代器。

二、STL库中各算法的主要操作

1.非修正算法

主要包括查找重复个数、查找、查找子序列最后出现的位置、foreach遍历、搜索相邻的重复元素。
实现代码如下:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int func(int i)
{cout<<i<<" ";}
int main()
{vector<int>  a;a.push_back(1);a.push_back(2);a.push_back(3);a.push_back(3);a.push_back(4);a.push_back(7);//1.查找重复个数int num = count(a.begin(),a.end(),3);cout<<num<<endl; //2.查找 vector<int>::iterator it = find(a.begin(),a.end(),3);cout<<*it<<endl; //3.查找子序列最后出现的位置vector<int>  b;b.push_back(3);b.push_back(4);vector<int>::iterator it1 = find_end(a.begin(),a.end(),b.begin(),b.end());cout<<*it1<<endl; //4.foreach 遍历 for_each(a.begin(),a.end(),func);cout<<endl;//5.搜索相邻的重复元素vector<int>::iterator it2 = adjacent_find(a.begin(),a.end());cout<<(*it2)++<<"  ";cout<<*it2<<endl;return 0;
}

2.修正算法

主要包括填充、以指定动作填充、洗牌、颠倒元素次序、分割。
代码实现如下:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int func(int i)
{cout<<i<<" ";
}
int fun1()
{return 100;
}
int fun2(int i)
{return i<=2;
}
int main()
{vector<int> a(10);//1.填充fill(a.begin(),a.end(),10);for_each(a.begin(),a.end(),func);cout<<endl;//2.以指定动作填充generate(a.begin(),a.end(),fun1);for_each(a.begin(),a.end(),func);cout<<endl;//3.洗牌(混淆)vector<int> b;b.push_back(1);  b.push_back(2);  b.push_back(3);  b.push_back(4);  b.push_back(5);  random_shuffle(b.begin(),b.end());for_each(b.begin(),b.end(),func);cout<<endl;//4.颠倒元素次序reverse(b.begin(),b.end());for_each(b.begin(),b.end(),func);cout<<endl;//5.分割vector<int>::iterator it = partition(b.begin(),b.end(),fun2);while(it!=b.end()){cout<<*it++<<" ";} return 0;
}

3.排序查找算法

主要包括排序、求最大值、寻找最大值所在元素、查找。
代码实现如下:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int func(int i)
{cout<<i<<"  ";
}
int main()
{vector<int> a;a.push_back(1); a.push_back(3); a.push_back(3); a.push_back(9); a.push_back(6); a.push_back(8); a.push_back(4); //1.排序cout<<"排序前:"<<endl;for_each(a.begin(),a.end(),func);cout<<endl; cout<<"排序后:"<<endl;sort(a.begin(),a.end());for_each(a.begin(),a.end(),func);cout<<endl; //2.最大值int m = max(1,3);cout<<m<<endl;//3.最大值所在元素vector<int>::iterator it = max_element(a.begin(),a.end());cout<<*it<<endl;//4.查找bool b = binary_search(a.begin(),a.end(),4);cout<<b<<endl; return 0;
}

4.数值算法

主要包括元素累计、累加求和、内积、部分求和。
代码实现如下:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>using namespace std;int main()
{//1.元素累加 vector<int> a;a.push_back(1);a.push_back(2);a.push_back(3); //2.累加求和(元素累加,再加上最后的初始值) int result = accumulate(a.begin(),a.end(),0);cout<<result<<endl;//3.内积(对应元素乘积,再加上最后的初始元素)vector<int> b;b.push_back(1);b.push_back(1);b.push_back(1);result = inner_product(a.begin(),a.end(),b.begin(),0);cout<<result<<endl;vector<int> c(3); /*4.部分求和(把原始的第一个元素赋值给第一个元素) 第二个和第一个和赋值给第二个第三个和第二个和赋值给第三个 */ partial_sum(a.begin(),a.end(),c.begin());cout<<c.at(0)<<endl; return 0;
}

总结

以上就是C++的STL库中各算法及其主要操作的全部内容啦,算法是建立在迭代器的基础之上进行的,所以,学好迭代器很关键!

C++——STL库中各算法以及其主要运用简介相关推荐

  1. C++11 中STL库中新增内容

    C++ 11一个比较显著的变化是以前boost库中的一些函数被正式标准化合入到STL中了,本文就简单的介绍一下. 引用包装器(Reference Wrapper) 当模板函数参数为泛型类型的时候,无法 ...

  2. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  3. 大文件MD5计算 C语言 (从OpenSSL库中分离算法:三)

    从OpenSSL库中分离算法-MD5算法-大文件MD5计算 续上述博客 小文件计算MD5时,可以把文件数据一次性都读到内存中计算,但当文件很大时,将文件一次性读到内存中是不可行的,此时,需要对文件数据 ...

  4. PPQ库中KLD算法实现代码解析

    PPQ量化工具库KLD算法解析 前言 PPQ算法实现 NVIDIA的PPT中KLD算法流程 KLD算法PPQ实现版本 PPQ与NVIDIA的区别: 前言 这是对PPQ库中KLD算法实现代码解析,关于P ...

  5. C++STL库中不可或缺的部分—string(模拟实现)

    前文 大家好,本篇文章主要是讲解一下 string一些常用接口的模拟实现. 众所周知,在日常生活中,字符串无处不在,如 ''just do it'',''中国'',''一坤年''等,想要在计算机上将这 ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )

    文章目录 一.mmap 简介 二.mmap 函数作用 一.mmap 简介 mmap 函数的作用是 将 文件 映射到 内存中 , 映射的单位必须是 PAGE_SIZE ; mmap 函数引入头文件 : ...

  7. scikit-learn库中聚类算法自定义距离度量方式

    scikit-learn是非常漂亮的一个机器学习库,在某些时候,使用这些库能够大量的节省你的时间,至少,我们用Python,应该是很难写出速度快如斯的代码的. scikit-learn官方出了一些文档 ...

  8. 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

    lower_bound算法返回第一个大于等于给定值所在的位置.设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置.当start和last指向相同位置 ...

  9. C++STL库中的map容器

    map简介 map是STL中的一个关联式的容器,可以建立key(first)和value(second)一对一的联系,由key映射到value. map内部自建了一棵红黑二叉树,可以对数据进行自动排序 ...

  10. c++ stl库中begin()和end()的区别

    c.begin();           返回指向容器最开始位置数据的指针 c.end();             返回指向容器最后一个数据单元+1的指针 如果我们要输出最后一个元素的值应该是 *( ...

最新文章

  1. linux rules.d文件
  2. vue 上传图片视频组件,可拍照选择照片,解决苹果手机拍照旋转问题
  3. 小工具查看MYSQL数据文件块和类型
  4. 美团产品顾问马占凯:关于育儿,你需要知道的一切
  5. Java黑皮书课后题第8章:*8.30(代数:解答线性方程)编写一个方法,解答下面的2*2线性方程组系统
  6. Web负载均衡学习笔记之四层和七层负载均衡的区别
  7. laraval如何使用tdd
  8. ping端口_干货分享:shell脚本批量telnet ip 端口
  9. 通过例子理解事务的4种隔离级别
  10. Python+OpenCV:理解支持向量机(SVM)
  11. iOS开发类似于刮刮卡效果,手指划过的区域形成画笔。适用于取出部分图片(截图),如截取出图片中带文字的区域部分。...
  12. WPF框架剖析,从头开始自己写WPF框架
  13. Vue html转word
  14. 【SequoiaDB|巨杉数据库】巨杉数据库快速入门
  15. 数据结构视频教程 -《吉大刘大有主讲》
  16. 文华财经多个非常实用的期货指标公式,文华财经支撑压力自动画线公式
  17. iis+php解析漏洞修复,IIS+PHP fastcgi模式 pathinfo取值错误任意代码执行漏洞修复方法...
  18. 2018.12.08【NOIP提高组】模拟B组总结(未完成)
  19. 《超大流量分布式系统架构解决方案-人人都是架构师2.0》读书笔记
  20. Sentry开启 Github sso 配置(self-hosted)

热门文章

  1. javascript手册地址
  2. python标准库模块——json库的用法
  3. 数字孪生:迈向未来,智慧城市大脑运营方案及整体建设解决方针
  4. 推荐给中学生的数学课外书:《怎样解题——数学思维的新方法》
  5. 游程编码解密(C语言详解)
  6. 打开其他软件时,老是弹出Xftp6安装的问题
  7. STM32L4系列二、STM32CubeMX 图形配置工具基本操作过程
  8. 企业生存与发展的前提是安全
  9. Python正则表达式(附语法详解)
  10. 二元/多元函数连续 极限存在问题