stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

yizhihongxing

STL常用算法介绍

STL(Standard Template Library)是C++标准库的一个庞大组成部分,提供了大量的常用算法,容器以及迭代器等等。这些工具都可以被拿来用来解决大部分的计算问题。其中stl常用算法主要包括排序算法和非变序型队列,下面进行详细讲解。

stl排序算法

STL提供了丰富的排序算法模板,可以直接拿来使用,无需重新实现。以下是一些常用的排序算法介绍:

1. sort()算法模板

sort()是最常用的排序算法模板,它可以对任意形式的数据类型进行排序,简单易用。如下是sort()模板的定义

template <class RandomAccessIterator>
void sort(RandomAccessIterator first, RandomAccessIterator last);

我们可以用以下示例来说明sort()的用法

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

int main(){
    int a[5]={3,1,4,5,2};
    sort(a,a+5);
    for(int i=0;i<5;i++)
        cout<<a[i]<<" ";
    return 0;
}

输出为:1 2 3 4 5

2. stable_sort()算法模板

stable_sort()算法模板为在sort()的基础上,可以满足排序后具有稳定性,即对于相等的元素,排序前后的相对位置不变。但是由于实现过程较为复杂,速度较慢。使用稳定的排序,可以不改变相等的元素相对顺序。

template<class RandomAccessIterator>
void stable_sort(RandomAccessIterator first, RandomAccessIterator last);

我们可以使用以下示例来说明stable_sort()的用法

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

struct Person{
    int age;
    string name;
    bool operator<(const Person &p) const{
        return age<p.age;
    }
};

bool comp(const Person &a, const Person &b){
    return a.age<b.age;
}

int main(){
    Person a[5]={{18,"Tony"},{20,"Jack"},{18,"Ben"},{21,"Lucy"},{20,"Marry"}};
    stable_sort(a,a+5,comp);
    for(int i=0;i<5;i++)
        cout<<a[i].name<<", "<<a[i].age<<endl;
    return 0;
}

输出为

Tony, 18
Ben, 18
Jack, 20
Marry, 20
Lucy, 21

非变序型队列

STL常用的非变序型队列包括deque,queue,stack三种类型。这些容器分别实现了不同的数据结构,可以满足不同的需求。

1. deque(双端队列)

deque支持常数时间的随机存取,并允许在两端进行插入和删除操作。由于deque只会损失渐进常数因子的速度,并不会因为元素数量的增加而变得耗时。如下是一个deque的使用示例。

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

int main(){
    deque<int> d;
    d.push_back(3); //在队列尾部插入元素3
    d.push_front(2); //在队列头部插入元素2
    d.push_back(4);
    d.pop_front(); //从队列头部删除元素2
    d.pop_back(); //从队列尾部删除元素4

    for(int i=0;i<d.size();i++)
        cout<<d[i]<<" "; //输出当前容器中元素
    return 0;
}

输出为:3

2. queue(队列)

queue是一种典型的先进先出(FIFO)数据结构,它提供了顺序插入和删除元素的一种简单方式,被广泛应用于模拟等领域。下面是queue的使用示例。

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

int main(){
    queue<int> q;
    q.push(1);
    q.push(2);
    q.push(3);
    q.pop(); //弹出队列头部元素
    cout<<q.front(); //输出队列头部元素
    return 0;
}

输出为:2

3. stack(栈)

stack是一种后进先出(LIFO)的容器,它支持将元素压入栈顶,弹出栈顶元素,以及获取当前栈顶元素等操作。下面是stack的使用示例。

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

int main(){
    stack<int> s;
    s.push(1);
    s.push(2);
    s.push(3);
    s.pop(); //弹出栈顶元素
    cout<<s.top(); //输出当前栈顶元素
    return 0;
}

输出为:2

总结

本篇攻略详细介绍了STL常用算法排序算法和非变序型队列,包括sort()算法模板,stable_sort()算法模板,deque(双端队列),queue(队列)和stack(栈)。通过实例讲解,让读者更好地理解和灵活运用这些常用算法和容器,可以为后续算法和数据结构的学习打下良好的基础。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列) - Python技术站

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

相关文章

  • c#实现选择排序的示例

    C#实现选择排序主要包含以下步骤: 定义数组 遍历数组,选出最小元素,并记录其索引 交换当前索引和最小值索引的元素 循环执行步骤2和步骤3,直到整个数组排序完成 以下是实现选择排序的C#示例: 示例1: int[] arr = new int[]{5, 3, 9, 1, 7, 4}; for (int i = 0; i <arr.Length; i++…

    算法与数据结构 2023年5月19日
    00
  • Java针对ArrayList自定义排序的2种实现方法

    这里给出针对ArrayList自定义排序的两种方法的详细攻略,分别为使用Comparator接口和使用Comparable接口。 1.使用Comparator接口 Comparator接口是JAVA中的一个接口, 我们可以在其中实现自定义的一些比较规则, 然后使用这些规则去对一些数据进行排序。 接下来是这种方式的实现步骤: 第一步:定义比较规则 我们需要实现…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现三路快速排序算法原理

    C/C++实现三路快速排序算法原理 算法概述 三路快速排序算法是一种优化版本的快速排序算法,能够处理含有大量重复元素的数组,避免了快速排序中大量递归处理相等元素的繁琐工作。 三路快速排序的原理是采用三个指针将数组分成小于、等于和大于三个部分,递归地向下快速排序,最终将整个数组排序。 实现步骤 首先选取数组中的一个元素作为标志物,通常是数组的第一个元素。 定义…

    算法与数据结构 2023年5月19日
    00
  • C++中二叉堆排序详解

    C++中二叉堆排序详解 什么是二叉堆排序 二叉堆是一种特殊的二叉树,它有两个特性: 根节点的键值是所有节点中最小/最大的; 对于节点i的键值一定不大/小于它的父节点i/2。 根据第二个规则,我们可以对于任何一个节点i,以i为根的子树都是一个小根堆/大根堆。将二叉堆中最小/最大的根节点取出,然后将最后一个节点放到根位置,再对根节点进行一次向下调整的操作,就可以…

    算法与数据结构 2023年5月19日
    00
  • c++归并排序详解

    C++归并排序详解 归并排序是一种基于分治思想的高效排序算法,它的时间复杂度为O(nlogn),并且它的稳定性使得它在实际应用中得到了广泛的应用。在本文中,我们将为大家详细讲解C++归并排序的具体实现过程和算法思想。 算法原理 归并排序基于分治算法,首先将待排序序列不断二分,直到每个子序列只剩一个元素,然后将相邻的子序列进行归并,合并后的子序列再次进行归并,…

    算法与数据结构 2023年5月19日
    00
  • C++ 计数排序实例详解

    C++ 计数排序实例详解 简介 计数排序是一种稳定的排序算法,其时间复杂度为O(n + k),其中n为待排序序列的长度,k为序列中元素的取值范围。相比其他排序算法,计数排序的时间复杂度较小,但需要占用更多的内存空间。计数排序在排序的元素值比较小,且元素集合密集程度比较大的场景下表现更加出色。 算法原理 计数排序的基本思想是,统计待排序序列中,每个元素出现的个…

    算法与数据结构 2023年5月19日
    00
  • 超详细解析C++实现快速排序算法的方法

    超详细解析C++实现快速排序算法的方法 什么是快速排序? 快速排序是一种高效的排序算法。因为采用了分治法的思想,利用递归实现,每次排序只需比较部分元素,而不需要像冒泡排序和插入排序那样需要从头到尾对比每个元素,因此效率非常高。 快速排序算法的基本思想 快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,使得前面的记录的关键字均小于后面的记录的关键…

    算法与数据结构 2023年5月19日
    00
  • php实现的常见排序算法汇总

    PHP实现的常见排序算法汇总 本文主要介绍几种PHP实现常见排序算法的方法,帮助读者快速了解和使用这些排序算法。 排序算法是计算机编程领域中非常重要的基础算法之一,可以用于对数据进行排序,常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序等,本文将介绍其中的三种算法。 冒泡排序 冒泡排序是一种简单直观的排序算法,通过比较相邻元素的大小,将较大的元素逐个…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部