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

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语言常见排序算法之插入排序(直接插入排序, 希尔排序)”。 直接插入排序 算法思路 直接插入排序算法的实现思路是:将一个无序的数据序列分为一个有序子序列和一个无序子序列两部分,将无序子序列的元素一个一个插入到有序子序列中,直到插入完所有元素,最终形成一个新的有序序列。在具体编写代码时,我们会将数据序列看作是一个数组来进行操作。 代…

    算法与数据结构 2023年5月19日
    00
  • C++实现希尔排序(ShellSort)

    下面是关于C++实现希尔排序(ShellSort)的攻略。 什么是希尔排序? 希尔排序是插入排序的一种改进版本,与普通插入排序不同的是,它会先将数组按一定间隔 gap 分成若干个小组进行插入排序,然后缩小间隔再分组排序,直到最后 gap 为 1,此时整个序列就是有序的。希尔排序的本质就是分组的插入排序。 希尔排序的代码实现 下面针对希尔排序的核心代码进行讲解…

    算法与数据结构 2023年5月19日
    00
  • C语言中的结构体快排算法

    C语言中的结构体快排算法 在C语言中,复杂的数据类型可以通过结构体定义。结构体是一种自定义类型,可以由不同类型的变量组成。快速排序算法是一种高效的排序算法,通过十分巧妙的算法思想,可以在平均$O(nlogn)$的时间复杂度内完成数组的排序。对于结构体类型的排序,在快速排序算法中也可以使用。本文主要讲解如何在C语言中使用结构体进行快排排序。 快速排序算法 快速…

    算法与数据结构 2023年5月19日
    00
  • C++中的几种排序算法

    下面就C++中几种常用的排序算法进行详细的讲解。 一、冒泡排序 冒泡排序是一种基本排序算法,也是入门级别的排序算法。其基本思想就是对于一组待排序的数据,通过不断地比较相邻两个元素的大小关系,并对需要调整位置的元素进行交换,来达到排序的目的。 C++代码实现: void bubble_sort(int arr[], int n) { for (int i = …

    算法与数据结构 2023年5月19日
    00
  • Linux静态链接库使用类模板的快速排序算法

    下面是对“Linux静态链接库使用类模板的快速排序算法”的详细讲解。 简介 静态链接库是一种文件格式,其中包含了许多可共享的目标文件,这些目标文件可以在运行时被动态链接器加载。可以将静态链接库视为预编译的代码,包含在可执行程序中,因此在执行时无需加载库文件,从而提高程序的运行效率。 在Linux下,可以使用静态链接库的方式来实现类模板的快速排序算法,具有较高…

    算法与数据结构 2023年5月19日
    00
  • Java 十大排序算法之计数排序刨析

    Java 十大排序算法之计数排序刨析 算法介绍 计数排序是一个时间复杂度为O(n+k)的非基于比较的排序算法,其中n是待排序元素的个数,k是待排序元素的范围,即待排序元素的最大值减去最小值再加1。 算法通过构建一个长度为k的计数数组来统计每个元素出现的次数,然后借助计数数组按顺序输出每个元素,就完成了排序过程。 因为计数排序是非基于比较的算法,因此可以在一定…

    算法与数据结构 2023年5月19日
    00
  • python中的插入排序的简单用法

    下面是Python中插入排序的简单用法攻略: 1. 什么是插入排序 插入排序是一种简单的排序算法,它的基本思想是将未排序的元素依次插入到已排序的有序序列中的合适位置,以此完成排序。插入排序的时间复杂度为O(n^2),通常用于小规模数据的排序。 2. 插入排序的Python实现 以下是插入排序的Python代码实现: def insertion_sort(da…

    算法与数据结构 2023年5月19日
    00
  • 排序算法之PHP版快速排序、冒泡排序

    排序算法之PHP版快速排序、冒泡排序 在算法和数据结构中,排序是一种重要的操作,主要目的是将一组无序的数据按照一定的规则进行排序。常见的排序算法有冒泡排序、快速排序、归并排序等。本文将详细介绍php版本的快速排序和冒泡排序的实现。 冒泡排序 冒泡排序是一种最简单的排序算法之一。其思想是从数组的第一个元素开始比较,将大的元素交换到后面,依次比较下去,直到排序完…

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