C++(13) STL 库初识

STL 库初识

1. STL 库
1.1 STL 库的案例

类似学习了模板的概念。C++STL (标准模板库) 是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如:向量、链表、队列、栈。

1.2 C++ 标准模板库的三个组件

C++ 标准模板库的核心包括以下三个组件:

组件描述
容器 (Containers)容器是用来管理某一类对象的集合。C++提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法 (Algorithms)算法用于容器。它们提供了执行各种操作的方式,包括对容器执行初始化、排序、搜索和转换等操作。
迭代器 (itreators)迭代器用于遍历对象集合的元素。这些元素可能是容器,也可能是容器的子集。
1.3 案例展示

代码案例

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{
    /*
    得到了一个要求存储类型为 int 类型的 vector 容量
    底层实现方式为数组形式,可以从数组角度分析,完成增删改查操作
    */
    vector<int> v1 = vector<int>();

    cout << "size : " << v1.size() << endl; // 0
    cout << "capacity : " << v1.capacity() << endl; // 0

    /*
    vector 容器提供的插入数据的方法
    */
    v1.push_back(1);
    cout << "size : " << v1.size() << endl; // 1
    cout << "capacity : " << v1.capacity() << endl; // 1

    v1.push_back(2);
    cout << "size : " << v1.size() << endl; // 2 
    cout << "capacity : " << v1.capacity() << endl; // 2

    v1.push_back(3);
    cout << "size : " << v1.size() << endl; // 3
    cout << "capacity : " << v1.capacity() << endl; // 4

    v1.push_back(4);
    cout << "size : " << v1.size() << endl; // 4
    cout << "capacity : " << v1.capacity() << endl; // 4

    v1.push_back(5);
    cout << "size : " << v1.size() << endl; // 5
    cout << "capacity : " << v1.capacity() << endl; // 8
    cout << "\n";

    // 1 2 3 4 5
    cout << "v1[2] : " << v1[2] << endl; // 3

    /*
    at(int idx); 
    返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range 异常
    */
    cout << "v1.at(2) : " << v1.at(2) << endl; // 3

    /*
    front();
    返回容器中第一个数据元素
    */
    cout << "v1.front() : " << v1.front() << endl; // 1

    /*
    back();
    返回容器中最后一个数据元素
    */
    cout << "v1.back() : " << v1.back() << endl; // 5

    /*
    删除最后一个元素
    */
    v1.pop_back();

    cout << "v1.back() : " << v1.back() << endl; // 4

    return 0;
}
2. 迭代器
1.1 概述和分类

在这里插入图片描述

C++ STL 库中的迭代器和其分类:

迭代器类型描述
输入迭代器 (Input Iterator)用于读取数据序列的元素,只能使用前向迭代操作
输出迭代器 (Output Iterator)用于向数据序列写入元素,只能使用前向迭代操作
前向迭代器 (Forward Iterator)用于读写数据序列的元素,支持前向迭代操作
双向迭代器 (Bidirectional Iterator)用于读写数据序列的元素,支持前向和后向迭代操作
随机访问迭代器 (Random Access Iterator)用于读写数据序列的元素,支持随机访问操作和常数时间复杂度的元素访问
连续内存迭代器 (Contiguous Iterator)特殊形式的随机访问迭代器,用于在连续内存中移动
反向迭代器 (Reverse Iterator)反向封装其他迭代器,实现反向遍历操作
2.2 代码案例

利用 STL 库中使用频率较高的 vector 来演示迭代器

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{
    // 得到一个要求存储类型为 int 类型的 vector 容量
    vector<int> v1;

    // 将数据放入 v1 里
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    v1.push_back(5);

    vector<int>::iterator it = v1.begin();

    /*
    iterator 是一个针对于当前 vector 容器的迭代器
    是访问数据内容的一个【指针】,如果想要提取 vector 中
    存储的数据内容,需要通过 *it 获取
    */
    cout << "*it : " << *it << endl; // 1
    it++;
    cout << "*it : " << *it << endl; // 2

    cout << "--------------------------" << endl;

    // 利用 for 循环展示整个数据情况
    for (vector<int>::iterator it2 = v1.begin();
            it2 != v1.end();
            it2++)
    {
        cout << "*it2 : " << *it2 << endl;
    }

    return 0;
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值