📜  stl - C++ (1)

📅  最后修改于: 2023-12-03 14:47:43.007000             🧑  作者: Mango

STL - C++

STL (Standard Template Library) 是 C++ 标准库中的一个部分,它提供了许多基本数据结构和算法的抽象实现,使得 C++ 程序员能够高效地实现各种任务。

数据结构

STL 提供了许多基本数据结构的抽象实现,这些数据结构可以直接用于程序开发中。

Vector

Vector 是一种数组式的存储结构,它可以支持高效的随机访问和插入/删除操作。使用 vector 需要包含头文件 #include <vector>

#include <vector>
#include <iostream>

using namespace std;

int main()
{
    //创建一个整型的vector,并插入5个元素
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);

    //输出vector的元素
    for (auto i : v)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

上述代码创建了一个整型的 vector,并插入了 5 个元素。最后通过 for 循环遍历 vector 并输出每个元素。

Stack

Stack 是一个 LIFO (Last In First Out) 栈结构,它只提供在栈顶插入和删除元素的操作。使用 stack 需要包含头文件 #include <stack>

#include <stack>
#include <iostream>

using namespace std;

int main()
{
    //创建一个整型的栈
    stack<int> s;

    //向栈中压入3个元素
    s.push(1);
    s.push(2);
    s.push(3);

    //弹出栈顶元素
    s.pop();

    //输出栈顶元素
    cout << s.top() << endl;

    return 0;
}

上述代码创建了一个整型的栈,并向其中压入了 3 个元素。然后通过 pop() 方法弹出栈顶元素,并通过 top() 方法输出当前栈顶元素。

Queue

Queue 是一个 FIFO (First In First Out) 队列结构,它只提供在队列尾插入和在队列头删除元素的操作。使用 queue 需要包含头文件 #include <queue>

#include <queue>
#include <iostream>

using namespace std;

int main()
{
    //创建一个整型的队列
    queue<int> q;

    //向队列中插入3个元素
    q.push(1);
    q.push(2);
    q.push(3);

    //弹出队列头元素
    q.pop();

    //输出队列头元素
    cout << q.front() << endl;

    return 0;
}

上述代码创建了一个整型的队列,并向其中插入了 3 个元素。然后通过 pop() 方法弹出队列头元素,并通过 front() 方法输出当前队列头元素。

算法

STL 还提供了许多基本算法的抽象实现,这些算法可以直接用于程序开发中。

排序

STL 提供了多种排序算法的实现,其中最常用的是快速排序和归并排序。使用排序算法需要包含头文件 #include <algorithm>

快速排序

快速排序是一种基于分治法的高效排序算法,它的平均时间复杂度为 O(nlogn)。

#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

int main()
{
    //创建一个整型的vector
    vector<int> v{ 5, 3, 2, 4, 1 };

    //对vector进行快速排序
    sort(v.begin(), v.end());

    //输出排序后的vector
    for (auto i : v)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

上述代码创建了一个整型的 vector,并使用 STL 提供的 sort() 方法进行快速排序。最后通过 for 循环遍历 vector 并输出每个元素。

归并排序

归并排序也是一种基于分治法的排序算法,它的时间复杂度为 O(nlogn)。

#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

// 归并排序递归函数
void merge_sort(vector<int>& v, int begin, int end)
{
    if (end - begin <= 1) return;
    int mid = begin + (end - begin) / 2;
    merge_sort(v, begin, mid);
    merge_sort(v, mid, end);
    inplace_merge(v.begin() + begin, v.begin() + mid, v.begin() + end);
}

int main()
{
    //创建一个整型的vector
    vector<int> v{ 5, 3, 2, 4, 1 };

    //对vector进行归并排序
    merge_sort(v, 0, v.size());

    //输出排序后的vector
    for (auto i : v)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

上述代码同样创建了一个整型的 vector,并使用 STL 提供的 merge_sort() 方法进行归并排序。最后通过 for 循环遍历 vector 并输出每个元素。

总结

STL 是 C++ 标准库中提供的一个非常重要的部分,它能够大大提高程序员的效率和开发质量。本文介绍了 STL 中常用的数据结构和算法的实现方式,希望读者能够理解并在实际开发中应用到这些工具中。