【知识点】深入浅出STL标准模板库

前几天谈论了许多关于数论和数据结构的东西,这些内容可能对初学者而言比较晦涩难懂(毕竟是属于初高等算法/数据结构的范畴了)。今天打算来讲一些简单的内容 - STL 标准模板库。

STL 标准模板库

C++ 标准模板库 (Standard Template Library, STL),是 C++ 语言非常重要的一个构成部分。它提供了一组通用的类和函数,用于实现一些数据结构和算法。STL 主要包含以下五个部分:

  1. 容器 (Containers):STL 提供了不同的容器来供开发者根据所需要维护数据来选择存储。
  2. 算法 (Algorithms):STL 提供了许多通用算法,用于排序、搜索、复制、修改等操作。
  3. 迭代器 (Iterators):STL 迭代器的作用是遍历容器元素的对象。
  4. 函数对象 (Function Objects):这是一种行为类似于函数的对象(由于不太常见,因此本篇文章将不会详细讲解 STL 中的函数对象)。
  5. 适配器 (Adapters):STL 的适配器用于修改容器、迭代器或函数对象的接口。为方便起见,容器适配器将会与容器部分一同讲解。

综上所述,本文将会主要围绕 容器、算法和迭代器这三者来展开叙述。本文只会阐述一些相对常见的模板/方法,部分生僻的内容还请各位自行上网搜索。

容器 Containers

STL 容器还可以被细分成三个类别,分别是 序列式容器 (Sequence Containers)关联式容器 (Associative Containers)无序关联式容器 (Unordered Associative Containers)

序列式容器 (Sequence Containers) 与常见容器适配器。

  1. vector 向量容器:向量容器可以被理解为我们常说的动态数组。与普通数组不同的是,动态数组的大小可以在运行过程中更改,并且用户可以任意地在此数组的末尾添加数据。它的优点是支持快速随机访问和在末尾插入删除元素。向量容器的基本使用方法如下:
#include <iostream>
#include <vector>  // 引入头文件
using namespace std;

int main(){
   
   
    // 创建一个整数类型,名为 vec 的向量容器,初始存放了数字1-5。
    vector<int> vec = {
   
   1, 2, 3, 4, 5};
    
    vec.push_back(6);  // 向容器末尾添加一个元素6。
    vec.size();  // 获取容器的大小,即容器内元素的个数。
    vec.resize(10);  // 动态更改容器的大小,将容器的大小设置为10。

    // 通过 for 循环对容器进行遍历:
    for (int i=0; i<vec.size(); i++){
   
   }
    for (int i : vec) {
   
   }
    return 0;
}
  1. queue 队列容器适配器:队列是一种基本的数据结构,其讲究 先进先出 (FIFO),即最先添加进适配器的元素会被第一个弹出,以此类推。在队列中,所有元素都会从队尾入队,并从对首出队。队列适配器的优点是支持随机访问队首和队尾元素。队列容器严格意义上并非序列式容器,而是一种容器适配器。队列容器适配器的基本使用方法如下:
#include <iostream>
#include <queue>  // 引入头文件
using namespace std;

int main(){
   
   
    // 创建一个存放整数类型,名为 que 的队列容器适配器,一开始默认为空。
    queue<int> que;

    que.push(10);  // 向队尾添加一个新元素。
    que.front();  // 获取队首元素,此时队首元素为数字10。
    que.pop();  // 将队首元素出队,此时的队列容器为空。
    que.size();  // 获取队列的长度,即对内元素的个数。
    que.empty();  // 判断队列是否为空,为空返回真,否则返回假。

    // 队列元素不支持直接遍历,只能从头一个一个弹出。
    // 在弹出元素时需要保证队内不为空。
    while (!que.empty()){
   
   
        int t = que.front();
        que.pop();
        cout << t << endl;
    }
    return 0;
}
  1. stack 栈容器适配器:栈也是一种基本的数据结构,栈实现的是 后进先出 (LIFO),即最后添加进该适配器的元素会最先弹出。在栈中,所有元素都会从栈顶入栈,并从栈顶出栈。栈容器严格意义上并非序列式容器,而是一种容器适配器。栈容器适配器的基本使用方法如下:
#include <iostream>
#include <stack>  // 引入头文件
using namespace std;

int main(){
   
   
    // 创建一个存放整数类型,名为 s 的栈容器适配器,一开始默认为空。
    stack<int> s;

    s.push(10);  // 将元素压入栈顶。
    s.top();  // 获取栈顶元素,此时的栈顶元素为数字10。
    s.pop();  // 将栈顶元素出栈,此时栈内没有元素。
    s.size();  // 获取栈内元素的个数。
    s.empty();  // 判断栈是否为空,为空返回真,否则返回假。

    // 与队列相同,栈内元素不支持直接遍历,只能从栈顶一个一个弹出。
    // 在弹出元素时需要保证栈内不为空。
    while (!s.empty()){
   
   
        int t = s.top();
        s.pop();
        cout << t << endl;
    }
    return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值