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语言回溯法 实现组合数 从N个数中选择M个数

    下面是C语言回溯法实现组合数从N个数中选择M个数的完整攻略: 核心思路 回溯法是一种经典的问题求解方法,其基本思路是:从一条路径开始,依次尝试每一个分支,递归地进行尝试,直到找到解为止,而如果该路径无解,则回退到上一个路径,继续尝试其他分支。 在利用回溯法解决从N个数中选择M个数的组合数问题时,我们可以将每个数看作一个节点,根据回溯的思想依次尝试每一个节点,…

    C 2023年5月22日
    00
  • C++中的类成员函数当线程函数

    C++中的线程库(std::thread)可以处理各种类型的函数作为线程函数,包括类的成员函数。对于类成员函数,我们需要考虑如何处理this指针,并注意线程的生命周期。 以下是将类成员函数作为线程函数的完整攻略: 步骤1:定义类 首先,需要定义一个含有成员函数的类。本例中,我们定义了一个简单的Counter类,它具有公共函数increment(),用于增加计…

    C 2023年5月22日
    00
  • DevC程序代码前的序号怎么去掉?

    要去掉 DevC++ (或其他编译器) 中程序代码前的行号,可以通过以下步骤实现: 在 DevC++ 中打开要去掉行号的代码文件。 在工具栏中选择“格式”菜单,然后选择“批量替换”选项。 在弹出的窗口中,将“查找”输入框中的内容设置为“^\d+”,将“替换为”输入框中的内容设置为空(即不填内容),然后点击“全部替换”按钮。 程序即可去除行号。 以下是两个示例…

    C 2023年5月23日
    00
  • Django 实现下载文件功能的示例

    实现 Django 下载文件功能需要以下几个步骤: 1. 定义 URL 和视图函数 在 urls.py 中定义 URL,将其映射到相应的视图函数上。如下所示: from django.urls import path from myapp.views import download_file urlpatterns = [ path(‘download/&l…

    C 2023年5月23日
    00
  • C#实现生成所有不重复的组合功能示例

    生成所有不重复的组合是一项常见的算法问题,可以使用C#编程语言轻松实现。下面是一个完整的攻略: 1. 程序实现思路 生成所有不重复的组合功能的实现思路如下: 创建一个长度为n的数组,数组中存储n个不同的元素。 从数组中选出其中的k个元素,形成一个组合。 从数组中选取下一个元素,生成下一个组合。 重复上述步骤,直到所有组合都被生成。 2. 实现代码 下面是使用…

    C 2023年5月22日
    00
  • 基于C语言实现简单的12306火车售票系统

    基于C语言实现简单的12306火车售票系统攻略 步骤一:项目准备 在开始实现火车售票系统之前,需要做好以下准备: 了解C语言基础知识; 安装C编译器,如gcc等; 确定系统开发平台,例如Windows,Linux等。 步骤二:完成项目的代码编写 在代码编写的过程中,需要注意以下几点: 设计程序的数据结构,例如车次信息、站点信息等; 实现数据的输入和输出功能,…

    C 2023年5月23日
    00
  • C++解决业务办理时间问题示例解析

    C++解决业务办理时间问题示例解析 简介 C++是一种高效且广泛应用于各种领域的编程语言。在处理业务办理时间问题上,C++的高效处理能力可以很好地解决问题。本文将详细讲解如何使用C++解决业务办理时间问题,包括算法分析、编写代码和实际应用。 算法分析 在处理业务办理时间问题时,最重要的是设计合适的算法。我们可以通过以下步骤来实现: 首先,需检查某一个窗口是否…

    C 2023年5月23日
    00
  • C++中的HTTP协议问题

    C++中的HTTP协议问题 HTTP协议是现代Web应用程序的基础。在C++中正确地使用HTTP协议可以让你构建出更高效、更强大的Web应用程序。下面是一些C++中使用HTTP协议时需要注意的问题: 1. 网络通信 在C++中,网络通信可以使用轻量级的HTTP库来实现。目前有很多这样的库供我们使用,例如libcurl、cpp-netlib等。这些库可以方便地…

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