iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ STL中常用算法怎么使用
  • 590
分享到

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

2023-06-21 21:06:36 590人浏览 八月长安
摘要

这篇文章主要讲解了“c++ STL中常用算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ STL中常用算法怎么使用”吧!前言在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中常用算法怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C++ STL中常用算法怎么使用

本文链接: https://www.lsjlt.com/news/300793.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C++ STL中常用算法怎么使用
    这篇文章主要讲解了“C++ STL中常用算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ STL中常用算法怎么使用”吧!前言在C++中使用STL算法都要包...
    99+
    2023-06-21
  • C++ STL中常见的算法使用方式
    目录什么是STL?0. < algorithm> 是什么:1. Non-modifying sequence operations:1.1 find:(Find valu...
    99+
    2022-11-12
  • C++STL中的常用遍历算法分享
    目录1.for_each功能描述函数原型2.transform功能描述函数原型1.for_each 功能描述 实现容器遍历 函数原型 for_each(itertor beg,ite...
    99+
    2022-12-20
    C++ STL遍历算法 C++ 遍历算法 C++ STL
  • 浅析STL中的常用算法
    一、非变异算法 是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。非变异算法具有极为广泛的适用性,基本上可应用与各种容器。 1查找容器元素...
    99+
    2022-11-15
    STL 算法
  • C++ STL中五个常用算法使用教程及实例讲解
    目录前言sort()排序常用遍历算法for_each()常用遍历算法 搬运transform()查找算法find删除操作erase()实例应用前言 在C++中使用STL算法都要包含一...
    99+
    2022-11-12
  • C++STL容器中string类怎么用
    这篇文章将为大家详细讲解有关C++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言为什么学习string类:在C语言中,字符串是以'\0'结尾的集合,为了...
    99+
    2023-06-29
  • C++的STL中accumulate函数的使用方法
    目录1.累加求和2.自定义数据类型的处理3.用法补充前言: accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理 1.累加求和 in...
    99+
    2022-11-13
  • C++中STL标准库std::vector怎么用
    小编给大家分享一下C++中STL标准库std::vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 简介vector 是表示可以改变大小的数组的...
    99+
    2023-06-29
  • C++STL中vector容器的使用
    目录一、vector(1)区分size()和capacity()(2)迭代器失效(3)区分const_iterator和const iterator(4)区分reserve()和re...
    99+
    2022-11-13
  • C++怎么使用STL迭代器和容器
    这篇“C++怎么使用STL迭代器和容器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么使用STL迭代器和容器”文章吧...
    99+
    2023-07-02
  • STL中vector怎么用
    小编给大家分享一下STL中vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.vector是什么vector是一个表示可变大小数组的容器。vect...
    99+
    2023-06-29
  • 怎么用C++模拟实现STL容器
    这篇文章主要介绍了怎么用C++模拟实现STL容器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用C++模拟实现STL容器文章都会有所收获,下面我们一起来看看吧。一、list的介绍列表是一种顺序容器,它允许在...
    99+
    2023-07-04
  • 如何在C++中使用 STL 顺序容器
    今天就跟大家聊聊有关如何在C++中使用 STL 顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++ 标准模板库 STL 顺序容器容器数据结构顺序性重复性支持迭代器vecto...
    99+
    2023-06-15
  • 怎么使用C++实现Dijkstra算法
    本篇内容介绍了“怎么使用C++实现Dijkstra算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体代码1.graph类graph类用于...
    99+
    2023-07-02
  • C# AStar寻路算法怎么使用
    这篇文章主要讲解了“C# AStar寻路算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# AStar寻路算法怎么使用”吧!概述AStar算法是一种图形搜索算...
    99+
    2023-07-05
  • C++中的STL中map用法详解(零基础入门)
    目录一、什么是 map ? 二、map的定义 2.1 头文件 2.2 定义 2.3 方法 三、实例讲解 3.1 增加数据 3.2 删除数据 3.3 修改数据 3.4 查找数据...
    99+
    2022-11-12
  • C++深入分析STL中map容器的使用
    目录1、map容器2、map容器原理3、map容器函数接口4、使用示例1、map容器 map是C++ STL的一个关联容器,它提供一对一的数据处理能力。其中,各个键值对的键和值可以是...
    99+
    2022-11-13
  • C#中?、?.、??、??=运算符怎么使用
    本文小编为大家详细介绍“C#中、.、、=运算符怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中、.、、=运算符怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 可空类型修饰符 ?//&nb...
    99+
    2023-07-06
  • Java中常见的查找算法与排序算法怎么使用
    这篇文章主要介绍了Java中常见的查找算法与排序算法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java中常见的查找算法与排序算法怎么使用文章都会有所收获,下面我们一起来看看吧。1. 基本查找也叫做顺...
    99+
    2023-07-05
  • C语言中排序算法怎么用
    这篇文章主要为大家展示了“C语言中排序算法怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中排序算法怎么用”这篇文章吧。排序的概念及其运用排序的概念排序:所谓排序,就是使一串记录,按照...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作