C++ STL中五个常用算法使用教程及实例讲解

yizhihongxing

C++ STL中五个常用算法使用教程及实例讲解

作为C++语言的标准库之一,STL(Standard Template Library)提供了很多有用的容器和算法,让C++开发者更加高效地编写程序。本文将介绍STL中的五个常用算法,包括排序、查找、遍历、求和和去重,并以实例的形式展示具体使用方法。

排序算法

STL中提供了两个常用的排序算法,即sortstable_sort。其中,sort是快速排序的实现,而stable_sort则是归并排序的实现。两个算法的使用方法基本一致,只是在处理重复元素的时候有所不同,后者能够保证稳定性。下面是两个示例说明:

示例1

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int arr[] = {5,2,8,6,1,9,3,7,4};
    int len = sizeof(arr) / sizeof(arr[0]);
    sort(arr, arr+len);
    for(int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;
}

输出结果:

1 2 3 4 5 6 7 8 9

示例2

#include <iostream>
#include <algorithm>
using namespace std;

bool cmp(int a, int b)
{
    return a % 3 < b % 3; //余数小的放前面,保证稳定性
}

int main()
{
    int arr[] = {5,2,8,6,1,9,3,7,4};
    int len = sizeof(arr) / sizeof(arr[0]);
    stable_sort(arr, arr+len, cmp);
    for(int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;
}

输出结果:

3 6 9 5 8 2 7 1 4

查找算法

STL中提供了两个查找算法,即findbinary_search。其中,find是在序列中线性查找给定元素的位置,而binary_search则是使用二分查找算法在有序序列中搜索元素。下面是两个示例说明:

示例1

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int arr[] = {5,2,8,6,1,9,3,7,4};
    int len = sizeof(arr) / sizeof(arr[0]);
    if(find(arr, arr+len, 6) != arr+len)
    {
        cout << "6找到了!" << endl;
    }
    else
    {
        cout << "6没找到!" << endl;
    }
    return 0;
}

输出结果:

6找到了!

示例2

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9};
    int len = sizeof(arr) / sizeof(arr[0]);
    if(binary_search(arr, arr+len, 10))
    {
        cout << "10找到了!" << endl;
    }
    else
    {
        cout << "10没找到!" << endl;
    }
    return 0;
}

输出结果:

10没找到!

遍历算法

STL中提供了多个遍历算法,包括for_eachtransformaccumulate。其中,for_each用于遍历容器元素并执行指定操作,transform用于对容器中的每个元素进行变换,accumulate则用于对数值型容器元素求和。下面是两个示例说明:

示例1

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void print(int n)
{
    cout << n << " ";
}

int main()
{
    vector<int> v = {5,2,8,6,1,9,3,7,4};
    for_each(v.begin(), v.end(), print);
    cout << endl;
    return 0;
}

输出结果:

5 2 8 6 1 9 3 7 4

示例2

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int add(int x, int y)
{
    return x + y;
}

int main()
{
    vector<int> v = {1,2,3,4,5,6,7,8,9};
    int sum = accumulate(v.begin(), v.end(), 0, add);
    cout << "sum = " << sum << endl;
    return 0;
}

输出结果:

sum = 45

去重算法

STL中提供了unique算法,用于删除容器中相邻的重复元素,并返回去重后的尾迭代器。虽然该算法并不会改变容器的大小,但是返回的尾迭代器可以用于删除重复元素,从而实现真正的去重。下面是一个示例说明:

示例

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    vector<int> v = {1,2,2,3,4,4,5,5,5};
    vector<int>::iterator it;
    it = unique(v.begin(), v.end());
    for(auto i = v.begin(); i != it; i++)
    {
        cout << *i << " ";
    }
    cout << endl;
    v.erase(it, v.end());
    for(int i : v)
    {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

输出结果:

1 2 3 4 5 
1 2 3 4 5 

结语

以上就是STL中常用的五个算法,它们的用途十分广泛,在实际开发中都有很大的用处。希望本文能帮助读者更好地理解和使用STL。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ STL中五个常用算法使用教程及实例讲解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Python查找函数f(x)=0根的解决方法

    Python查找函数f(x)=0根的解决方法 在Python中,查找函数 $f(x)=0$ 根的解决方法主要有以下三种: 1. 数学库中的数值解函数 Python中的数学库提供了许多数值解函数,如 scipy.optimize 中的 root_scalar 函数。这个函数可以处理一般的一元函数求解问题,可以数值计算$f(x)=0$ 的根。 示例代码: fro…

    C 2023年5月22日
    00
  • C语言 数据结构与算法之字符串详解

    C语言 数据结构与算法之字符串详解 什么是字符串 在计算机科学中,字符串(string)是由零个或多个字符组成的有限序列,它是编程语言中的一种数据类型。在C语言中,字符串通常被看作是由字符组成的一维字符数组,以 ‘\0’(NUL)字符作为字符串的结束标志。 字符串的表示 在C语言中,字符串可以使用字符数组表示,例如: char str[10] = &quot…

    C 2023年5月23日
    00
  • c++ 判断是64位还是32位系统的实例

    当我们需要在C++程序中进行操作系统相关的操作时,有时候需要知道当前操作系统的位数,即是32位还是64位系统。本篇攻略将给出两个示例,分别介绍如何判断当前操作系统的位数。 1. 使用宏: 在C++中我们可以使用宏来判断当前操作系统的位数。以下是几个标准宏的定义: _M_IX86 // 32位系统 _M_X64 // 64位系统 我们可以通过检测这些宏来判断当…

    C 2023年5月23日
    00
  • 说说Android的UI刷新机制的实现

    关于Android的UI刷新机制,我们来一步步的进行详细讲解。 1. UI刷新机制 我们知道,Android应用程序的主线程也称为UI线程,负责处理用户界面的所有操作,包括UI的绘制和事件响应等等。但是,如果我们在UI线程上执行耗时操作,会导致界面卡顿,严重影响用户体验。所以,Android系统提供了UI刷新机制,来帮助我们解决这个问题。 Android的U…

    C 2023年5月22日
    00
  • C语言编程时常犯十八个错误小结

    以下是详细讲解“C语言编程时常犯十八个错误小结”的完整攻略: 一、背景介绍 C语言是一门广泛使用的编程语言,但它也有很多容易犯的错误。这些错误不仅会导致程序的崩溃,还会影响到程序的运行效率。为了帮助C语言入门者避免这些错误,本文会对常见的18个错误进行分析和总结,供大家参考。 二、常见错误及解决方法 1. 数组越界 如果使用一个不存在的数组下标来访问数组中的…

    C 2023年5月23日
    00
  • 浅析C# web访问mysql数据库-整理归纳总结

    接下来我将详细讲解“浅析C# web访问mysql数据库-整理归纳总结”的完整攻略。 1.安装MySQL Connector/NET 为了能够访问MySQL数据库,我们需要安装MySQL Connector/NET,可以通过以下步骤进行安装: 1.以管理员身份运行 Visual Studio。2.在“工具”菜单中选择“Nuget包管理器” > “程序包…

    C 2023年5月22日
    00
  • Matlab实现遗传算法的示例详解

    下面我会详细讲解一下“Matlab实现遗传算法的示例详解”的完整攻略,让您能够理解该示例的实现过程。 什么是遗传算法? 遗传算法是一种模拟自然进化过程的搜索算法,通过模拟进化过程实现对于最优解的搜索。遗传算法模拟的过程涉及到选择、交叉、变异等操作,从而在保持种群多样性的同时,逐步优化得到最优解。 遗传算法的基本流程 遗传算法的基本流程如下: 初始化种群,生成…

    C 2023年5月23日
    00
  • 配置iptables实现本地端口转发的方法详解

    下面是关于配置iptables实现本地端口转发的方法详解,包含两条示例说明: 一、什么是iptables iptables是Linux系统中基于网络包过滤的软件,它可以管理网络连接,实现网络包的过滤、NAT、端口转发、防火墙等功能,非常常用。 二、本地端口转发 本地端口转发是指将客户端请求的某个端口转发到本机的另一个端口,或者将本机请求的某个端口转发到远程机…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部