我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ STL中常用算法怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ STL中常用算法怎么使用

这篇文章主要讲解了“C++ STL中常用算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ STL中常用算法怎么使用”吧!

前言

在C++中使用STL算法都要包含一个算法头文件 #include<algorithm>

这样我们才能使用这个STL算法函数

sort()排序

  • Sort函数包含在头文件为#include<algorithm>的c++标准库中,是一个专门用来排序的高效的函数,我们在解决问题时可以方便快捷的排列顺序。

  • sort()函数中有三个参数,(数组首地址;需要结束的地址;排列方式)

第三个排列方式可以不写,系统会默认为从小到大;

让我们来看一下真实的案例

如果我们想从大到小排序,可以不写第三个参数

eg:

#include<iostream> #include<algorithm>//sort()函数所需头文件  using namespace std; int main() {  int a[10]={4,5,9,3,8,2,1,4,0,3};//初始化数组   for(int i=0;i<10;i++)  cout<<a[i];cout<<endl;  sort(a,a+10);//没有第三个参数,系统默认从小到大排序   for(int i=0;i<10;i++)  { cout<<a[i];} return 0; }

运行结果

C++ STL中常用算法怎么使用

当然,如果我们不想排完整个数组,只想将前几位从大到小排序也是可以的

Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则

less<数据类型>()//从小到大排序

greater<数据类型>()//从大到小排序

eg:

#include<iostream> #include<algorithm>  using namespace std; int main() {  int a[10]={4,5,9,3,8,2,1,4,0,3};//初始化数组   for(int i=0;i<10;i++)  cout<<a[i]; cout<<endl;  sort(a,a+10,greater<int>());//没有第三个参数,系统默认从小到大排序   for(int i=0;i<10;i++)  { cout<<a[i];} return 0; }

常用遍历算法for_each()

for_each()是一个常用的遍历算法

它的使用除迭代器外还需要包含仿函数或者普通函数来帮助他输出遍历结果,

eg:

#include<iostream>#include<algorithm>#include<vector>using namespace std;//常用遍历算法for_each//普通函数void print01(int val){cout<<val<<" "; }   //仿函数 class print02 { public: void operator()(int val) {cout<<val<<" ";}  } ;  //测试案例 void test01(){vector<int>v1;for(int i=0;i<10;i++){v1.push_back(i);//尾插法 }for_each(v1.begin(),v1.end(),print01);//利用普通函数遍历 cout<<endl;for_each(v1.begin(),v1.end(),print02());//利用仿函数遍历 cout<<endl; } int main(){test01();}

常用遍历算法 搬运transform()

使用方式与for_each()类似,它的使用除迭代器外还需要包含仿函数或者普通函数来帮助他输出遍历结果,

#include<iostream>#include<algorithm>#include<vector>using namespace std;//常用遍历算法  搬运transform  //仿函数 class Transform { public: int operator()(int val) {return val;}  } ;    //仿函数 class print02 { public: void operator()(int val) {cout<<val*10<<" ";}  } ;    //测试案例 void test01(){vector<int>v1;//原容器 for(int i=0;i<10;i++){v1.push_back(i);//尾插法 }vector<int>target;//目标容器 target.resize(v1.size());//提前给target目标容器开辟容量 transform(v1.begin(),v1.end(),target.begin(),Transform());//返回v1*10 for_each(target.begin(),target.end(),print02());//利用仿函数遍历 }int main(){test01();  }

查找算法find

功能描述:查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end();

#include<iostream>#include<algorithm>#include<vector>#include<string>using namespace std;//查找内置数据类型 void test01(){vector<int>v1;for(int i=0;i<10;i++){v1.push_back(i);//尾插法 }vector<int>::iterator it=find(v1.begin(),v1.end(),5); if(it==v1.end()){cout<<"没有找到"<<endl; }elsecout<<"找到了"<<endl; }int main(){test01();  }

删除操作erase()

删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束

a.erase(a.begin()+1,a.begin()+3);

erase()有三种用法

(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

实例应用

讲了这么多的算法,合理的使用它们,会极大简化我们的代码量和工作量;

下面我们就用这些算法函数来解决一道题;

C++ STL中常用算法怎么使用

(1)常规解法代码量大且容易出错

#include<stdio.h>#include<string.h>int main(){char s1[100];gets(s1);char s2[100];gets(s2);int len1,len2;//字符串长度len1=strlen(s1);len2=strlen(s2);int i,j,k;//循环变量int flag=1;//控制while循环int f;//判断是否删除while(flag)for(i=0; i<len1; i++){            flag=0;//默认s1中不存在符合要求的子串,若遍历完后flag仍为0则程序结束 if(s1[i]==s2[0])//寻找与子串第一个字母相同的字符 {f=1;//默认从第i个字符开始的子串符合要求 for(j=i,k=0; k<len2; j++,k++)//检验是否符合要求if(s1[j]!=s2[k])//若不符合要求,则f=0,退出for循环的检验{f=0;  break;}if(f)//若f不为0,则进行删除操作{flag=1;//即存在符合要求的子串,将flag=1以便再次检查 for(; j<len1; j++,i++)//将后面的字符逐一替换到前面 s1[i]=s1[j];for(; i<len1; i++)//对后续多余的字符串进行清空 s1[i]='\0';break;//重新开始for循环,从第一位开始寻找 }}len1=strlen(s1);//重新计算s1的长度,此步影响的用时很小,可有可无}puts(s1);return 0; }

(2)STL算法解题

我们使用上面讲到的两种算法来解决这个问题

#include<string>#include<iostream>using namespace std;int main(){    string s1, s2;    getline(cin, s1);            //行输入    getline(cin, s2);    while (s1.find(s2) < s1.length())        //判断S1中是否还存在S2    {        s1=s1.erase(s1.find(s2), s2.length());        //将S1中的S2删除掉    }    cout << s1 << endl;    return 0;}

使用STL解决问题高效又快捷 

感谢各位的阅读,以上就是“C++ STL中常用算法怎么使用”的内容了,经过本文的学习后,相信大家对C++ STL中常用算法怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ STL中常用算法怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++ STL中常用算法怎么使用

这篇文章主要讲解了“C++ STL中常用算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ STL中常用算法怎么使用”吧!前言在C++中使用STL算法都要包含一个算法头文件 #
2023-06-21

C++STL中的常用遍历算法分享

这篇文章主要为大家详细介绍了C++STL中两个常用的遍历算法,文中的示例代码讲解详细,具有一定的学习与借鉴价值,感兴趣的小伙伴可以参考一下
2022-12-20

浅析STL中的常用算法

以下是对STL中的常用算法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
2022-11-15

如何使用 C++ 函数对象扩展 STL 算法?

可以通过使用函数对象来扩展 stl 算法,函数对象是具有调用运算符 (operator()) 的类或结构。只需要将函数对象作为算法的参数传递即可,例如使用 std::sort 算法排序容器时,可以传递 std::greater 函数对象作为
如何使用 C++ 函数对象扩展 STL 算法?
2024-04-25

C++STL容器中string类怎么用

这篇文章将为大家详细讲解有关C++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言为什么学习string类:在C语言中,字符串是以\0结尾的集合,为了操作方便,在C标准库
2023-06-29

C++中STL标准库std::vector怎么用

小编给大家分享一下C++中STL标准库std::vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 简介vector 是表示可以改变大小的数组的
2023-06-29

STL中vector怎么用

小编给大家分享一下STL中vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.vector是什么1.vector是一个表示可变大小数组的容器。2.
2023-06-29

C++怎么使用STL迭代器和容器

这篇“C++怎么使用STL迭代器和容器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么使用STL迭代器和容器”文章吧
2023-07-02

C++ 中使用 STL 函数对象的常见错误和陷阱

stl 函数对象的常见错误和陷阱包括:忘记捕获默认成员变量。意外的值捕获。修改内部状态。类型不匹配。并发问题。C++ 中使用 STL 函数对象的常见错误和陷阱简介函数对象(函数式的对象)在 C++ 标准模板库 (STL) 中广泛使用。虽
C++ 中使用 STL 函数对象的常见错误和陷阱
2024-04-26

c++中stl容器干什么用的

stl 容器在 c++ 中的作用是存储和管理各种类型的数据,从而提供数据组织、内存管理、通用性、效率和可扩展性等优势。STL 容器在 C++ 中的作用STL(标准模板库)容器是包含在 C++ 标准库中的一个集合框架。这些容器本质上是类,旨
c++中stl容器干什么用的
2024-05-06

C#中?、?.、??、??=运算符怎么使用

本文小编为大家详细介绍“C#中?、?.、??、??=运算符怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中?、?.、??、??=运算符怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 可空
2023-07-06

怎么使用C++实现Dijkstra算法

本篇内容介绍了“怎么使用C++实现Dijkstra算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体代码1.graph类graph类用于
2023-07-02

Java中常见的查找算法与排序算法怎么使用

这篇文章主要介绍了Java中常见的查找算法与排序算法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中常见的查找算法与排序算法怎么使用文章都会有所收获,下面我们一起来看看吧。1. 基本查找也叫做顺
2023-07-05

C# AStar寻路算法怎么使用

这篇文章主要讲解了“C# AStar寻路算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# AStar寻路算法怎么使用”吧!概述AStar算法是一种图形搜索算法,常用于寻路。他是
2023-07-05

如何在C++中使用 STL 顺序容器

今天就跟大家聊聊有关如何在C++中使用 STL 顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++ 标准模板库 STL 顺序容器容器数据结构顺序性重复性支持迭代器vecto
2023-06-15

C++ 标准库中有哪些常用的 STL 函数对象?

c++++ stl 中提供了多种函数对象,可用于对元素进行比较、排序和操作。常见的函数对象包括用于升序排序的 less,用于降序排序的 greater,用于比较相等的 equal_to,以及用于绑定函数参数的 bind2nd 和 mem_f
C++ 标准库中有哪些常用的 STL 函数对象?
2024-04-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录