白骑士的C++教学进阶篇 2.4 标准模板库(STL)

19 篇文章 0 订阅

系列目录

上一篇:白骑士的C++教学进阶篇 2.3 模板

        C++标准模板库(Standard Template Library,简称STL)是C++标准库的一部分,提供了一组通用的模板类和函数,用于处理数据结构和算法。STL的核心组件包括容器、迭代器、算法和函数对象。本篇博客将详细介绍这些内容,帮助您深入理解和应用STL。

容器

        容器是STL中用于存储和管理数据的类。常见的容器包括 ‘vector‘、‘list‘、‘map‘ 和 ‘set‘。每种容器都有其独特的特性和使用场景。

‘vector‘

        ‘vector‘是一个动态数组,能够自动调整大小。它支持快速的随机访问和在末尾的高效插入和删除操作,例如:

#include <iostream>
#include <vector>


int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 访问元素
    std::cout << "First element: " << vec[0] << std::endl;

    // 插入元素
    vec.push_back(6);

    // 遍历元素
    for (int i : vec) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

‘list‘

        ‘list‘是一个双向链表,支持高效的插入和删除操作,但不支持随机访问,例如:

#include <iostream>
#include <list>


int main() {
    std::list<int> lst = {1, 2, 3, 4, 5};

    // 插入元素
    lst.push_back(6);

    // 遍历元素
    for (int i : lst) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

‘map‘

        ‘map‘是一个关联容器,用于存储键值对,并根据键自动排序。它支持高效的查找、插入和删除操作,例如:

#include <iostream>
#include <map>


int main() {
    std::map<std::string, int> ages;
    ages["Alice"] = 30;
    ages["Bob"] = 25;

    // 访问元素
    std::cout << "Alice's age: " << ages["Alice"] << std::endl;

    // 遍历元素
    for (const auto& pair : ages) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    return 0;
}

‘set‘

        ‘set‘是一个集合容器,用于存储唯一的元素,并根据值自动排序。它支持高效的查找、插入和删除操作,例如:

#include <iostream>
#include <set>


int main() {
    std::set<int> s = {1, 2, 3, 4, 5};

    // 插入元素
    s.insert(6);

    // 遍历元素
    for (int i : s) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

迭代器

        迭代器是STL中用于遍历容器元素的对象,类似于指针。STL提供了多种类型的迭代器,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,例如:

#include <iostream>
#include <vector>


int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用迭代器遍历元素
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }

    std::cout << std::endl;

    return 0;
}

算法

        STL中的算法是用于操作容器和数据的通用函数。常见的算法包括排序、查找、复制和修改等。

排序算法

        例如:

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


int main() {
    std::vector<int> vec = {5, 3, 1, 4, 2};

    // 排序
    std::sort(vec.begin(), vec.end());

    // 遍历元素
    for (int i : vec) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

查找算法

        例如:

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


int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 查找元素
    auto it = std::find(vec.begin(), vec.end(), 3);

    if (it != vec.end()) {
        std::cout << "Element found: " << *it << std::endl;
    } 

    else {
        std::cout << "Element not found" << std::endl;
    }

    return 0;
}

函数对象

        函数对象(functor)是一个重载了 ‘operator()‘ 的类或结构体实例,可以像函数一样调用。STL中的算法通常接受函数对象作为参数,用于实现灵活的操作,例如:

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


// 定义一个函数对象
struct MultiplyBy {
    int factor;

    MultiplyBy(int f) : factor(f) {}

    int operator()(int x) const {

        return x * factor;
    }
};


int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用函数对象
    std::transform(vec.begin(), vec.end(), vec.begin(), MultiplyBy(2));

    // 遍历元素
    for (int i : vec) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}

总结

        标准模板库(STL)是C++中一个强大且灵活的工具,通过提供容器、迭代器、算法和函数对象,使得编写高效、通用和可维护的代码成为可能。理解并熟练掌握STL的使用,将大大提高您的编程能力和效率。希望通过本篇博客的介绍,您能更好地理解和应用C++标准模板库,为编写复杂和高效的C++程序打下坚实的基础。

下一篇:白骑士的C++教学高级篇 3.1 文件操作​​​​​​​

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值