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

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日

相关文章

  • C语言实现数学表达式运算

    C语言实现数学表达式运算 概述 C语言提供了一系列函数库,可以实现数学表达式的运算。本篇攻略将介绍如何使用C语言实现数学表达式的运算的方法。 函数库 在C语言中实现数学表达式计算,可以使用数学函数库<math.h>和字符串处理函数库<string.h>。 <math.h>函数库 该函数库中包括了常见的数学函数,例如四则运算…

    C 2023年5月22日
    00
  • 基于Python实现二维图像双线性插值

    本文讲述如何使用Python实现二维图像的双线性插值方法。双线性插值是一种经典的图像插值方法,它可以用于在图像中寻找不存在的像素点的像素值。当像素点不存在时,通过双线性插值方法可以根据周围的像素点计算出不存在的像素点的值。下面详细讲解双线性插值的实现步骤和Python代码实现。 Step 1:了解双线性插值的原理 双线性插值就是在二维数学函数中按照一定的规律…

    C 2023年5月22日
    00
  • C++机房预约系统实现流程实例

    C++机房预约系统实现流程实例 本篇文章介绍如何使用C++实现一个机房预约系统。详细步骤如下: 1. 界面设计 首先,需要设计预约系统的界面。可以选择命令行界面和图形界面,这里选择命令行界面。 2. 系统功能 接下来,需要确定系统需要实现的功能。这里考虑以下几点: 订单管理:包括添加预约、取消预约和显示预约信息。 学生管理:包括添加学生、修改学生和删除学生。…

    C 2023年5月23日
    00
  • C++设计模式之原型模式

    下面我将详细讲解 C++ 设计模式之原型模式的完整攻略。 什么是原型模式? 原型模式是一种创建者模式,它通过复制现有对象来创建新对象,而不是直接实例化新对象。它通过在运行时动态生成对象副本的方式来创建新对象,避免了创建新对象的成本,并提高了性能。 原型模式的优缺点 优点: 在运行时生成新对象,避免了创建新对象的成本。 代码复杂度低,易于实现。 可以实现对象动…

    C 2023年5月22日
    00
  • PHP针对JSON操作实例分析

    PHP针对JSON操作实例分析 什么是JSON? JSON(JavaScript Object Notation)是一种数据交换格式,它使用易于人们阅读的文本来描述数据对象,同时也易于计算机解析和生成。JSON是一种轻量级的数据交换格式,可用于前后端数据传递。 PHP中如何操作JSON? PHP提供了一系列函数用来操作JSON数据,主要有以下几个: json…

    C 2023年5月23日
    00
  • C++实现简单的学生成绩管理系统

    C++实现简单的学生成绩管理系统攻略 系统功能概述 一般的学生成绩管理系统包含以下功能: 添加学生及其成绩信息 删除学生及其成绩信息 查询学生及其成绩信息 修改学生及其成绩信息 统计分析学生信息 保存和读取数据 开发环境配置 操作系统:Windows、Linux、macOS等 编译器:GCC、Microsoft Visual C++等 集成开发环境(IDE)…

    C 2023年5月23日
    00
  • C++中求组合数的各种方法总结详解

    C++中求组合数的各种方法总结详解 前言 组合数问题在许多算法问题中都有广泛应用,在C++中求组合数的方法也多种多样。本文将总结并详细解释C++中求组合数的各种方法。 直接递推法 组合数的定义式为:$C_{n}^{m}=\frac{n!}{m!(n-m)!}$,可以通过递归的方法直接求解。 递归式为:$C_{n}^{m}=C_{n-1}^{m-1}+C_{n…

    C 2023年5月22日
    00
  • c++11新增的便利算法实例分析

    C++11新增的便利算法实例分析 C++11为我们提供了许多实用的 STL 算法,其中一些算法来自 Boost 库,可以大大提高我们的编程效率。在本文中,我们将介绍 C++11 中的一些便利算法,包括 for_each(),transform() 和 sort(),并提供代码示例进行演示。 for_each() for_each() 算法允许我们对一个容器中…

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