C++学习笔记——标准模板库

发布时间:2024年01月13日

目录

?一、简介

二、STL概述

2.1STL是什么?

2.2STL的优势

三、容器(Containers)

3.1序列式容器(Sequence Containers)

3.2关联式容器(Associative Containers)

3.3容器适配器(Container Adapters)

四、算法(Algorithms)

4.1常见的算法分类

4.1.1一个使用STL算法对vector进行排序的示例代码

五、迭代器(Iterators)

5.1下面是一个使用迭代器遍历vector的示例代码

六、函数对象(Functors)

6.1下面是一个使用函数对象对vector进行排序的示例代码

七、分配器(Allocators)

7.1下面是一个使用自定义分配器的示例代码

七、STL扩展和补充


上一篇文章链接:

C++ 是一门功能强大的编程语言,它提供了很多工具来实现各种编程任务。在本文中,我们将介绍 C++ 中的三个重要概念:友元、嵌套类和异常。

C++学习笔记——友元、嵌套类、异常-CSDN博客文章浏览阅读20次。友元、嵌套类和异常是 C++ 中三个重要的概念,它们可以提高程序的灵活性、封装性和健壮性。但是,需要注意的是过度使用它们会破坏程序的封装性、增加代码的复杂度和影响程序的性能。因此,在编写程序时,应根据实际情况选择适当的编程技术来提高程序的可读性、可维护性和可靠性。https://blog.csdn.net/m0_62338174/article/details/135573148?spm=1001.2014.3001.5502

?

?一、简介

??? C++标准模板库(STL)是C++的一个重要组成部分,它提供了一套丰富的通用数据结构和算法。STL以其高度模块化、可复用的特性,在C++编程中发挥着重要作用。本篇博客将带你深入了解STL,并介绍其常见的组件和使用方法。

二、STL概述

2.1STL是什么?

C++标准模板库(STL)是C++语言的一个标准库,它提供了一套通用的数据结构和算法,以支持高效的编程。STL的设计目标是使程序员能够以简洁、高效和可复用的方式开发代码。

2.2STL的优势

STL的优势在于其高度模块化和可复用性。它提供了一系列容器、算法和迭代器等组件,这些组件可以独立于特定问题进行开发和测试,并且可以通过简单的组合来解决复杂的问题。此外,STL的算法和数据结构都经过了高度优化,因此在性能方面具有很大优势。

三、容器(Containers)

3.1序列式容器(Sequence Containers)

序列式容器是一种线性结构,它按照元素的插入顺序来存储和访问数据。常见的序列式容器包括vector、deque和list等。这些容器提供了灵活的内存管理和高效的元素访问。

3.2关联式容器(Associative Containers)

关联式容器是一种基于键值对存储和访问数据的数据结构。常见的关联式容器包括set、map和multimap等。这些容器提供了高效的数据检索和排序功能。

3.3容器适配器(Container Adapters)

容器适配器是一种特殊的容器,它们通过改变底层容器的接口或行为来提供不同的功能。常见的容器适配器有栈(stack)和队列(queue)等。它们通常基于vector或deque实现,提供了特定的数据访问方式。

四、算法(Algorithms)

常用算法概述 STL提供了丰富的算法,涵盖了排序、搜索、变换、合并等各种常见操作。这些算法可以应用于不同的容器,并且具有良好的可组合性和可重用性。

算法分类 STL的算法可以根据其操作对象进行分类。

4.1常见的算法分类

包括修改序列、非修改序列、排序、堆算法等。

使用STL算法的示例代码 下面是

4.1.1一个使用STL算法对vector进行排序的示例代码

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

int main() {
    std::vector<int> nums = {5, 2, 9, 1, 7};

    // 使用STL算法对vector排序
    std::sort(nums.begin(), nums.end());

    // 输出排序后的结果
    for (const auto& num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

五、迭代器(Iterators)

迭代器的作用和分类 迭代器是STL中用于遍历容器元素的工具。它提供了一种统一的访问元素的方式,使得算法可以独立于容器而工作。常见的迭代器类型包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。

迭代器的使用示例

5.1下面是一个使用迭代器遍历vector的示例代码

#include <iostream>
#include <vector>

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

    // 使用迭代器遍历vector并输出元素
    for (auto it = nums.begin(); it != nums.end(); ++it) {
        std::cout << *it << " ";
    }

    return 0;
}

六、函数对象(Functors)

函数对象的概念和作用 函数对象是一种行为类似函数的对象,它可以被当做函数来调用。在STL中,函数对象通常用于作为算法的参数,用于指定特定的操作。

函数对象的使用示例

6.1下面是一个使用函数对象对vector进行排序的示例代码

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

struct Compare {
    bool operator()(int a, int b) const {
        return a > b;
    }
};

int main() {
    std::vector<int> nums = {5, 2, 9, 1, 7};

    // 使用函数对象对vector排序
    std::sort(nums.begin(), nums.end(), Compare());

    // 输出排序后的结果
    for (const auto& num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

七、分配器(Allocators)

分配器的作用和使用方法 分配器用于管理容器的内存分配和释放。STL提供了默认的分配器,但也允许用户自定义分配器以满足特定需求。

自定义分配器的示例代码

7.1下面是一个使用自定义分配器的示例代码

#include <iostream>
#include <vector>
#include <memory>

template<typename T>
struct MyAllocator {
    using value_type = T;

    MyAllocator() = default;

    template<typename U>
    MyAllocator(const MyAllocator<U>&) {}

    T* allocate(std::size_t n) {
        return static_cast<T*>(::operator new(n * sizeof(T)));
    }

    void deallocate(T* p, std::size_t n) {
        ::operator delete(p);
    }
};

int main() {
    std::vector<int, MyAllocator<int>> nums(5);

    // 输出vector的大小
    std::cout << "Size: " << nums.size() << std::endl;

    return 0;
}

七、STL扩展和补充

C++11/14/17对STL的扩展 C++11、C++14和C++17标准对STL进行了扩展,引入了新的容器、算法和功能。例如,C++11引入了移动语义和右值引用,C++14引入了变长模板参数等。

Boost库和其他STL补充 Boost库是一个广泛使用的C++库,它提供了大量的扩展和补充STL的组件,包括智能指针、多线程支持、正则表达式和网络编程等。除此之外,还有其他第三方库也提供了对STL的补充和增强功能。

? ? ? STL是C++中一个强大而灵活的工具,它提供了一套丰富的容器、算法和迭代器等组件,可以大大简化C++程序的开发过程。通过学习STL的使用方法和特性,我们可以更加高效地编写可靠、可维护的C++代码。希望本篇博客能够为读者提供有关STL的全面介绍和实践指导,以帮助读者充分发挥STL在项目中的作用。

文章来源:https://blog.csdn.net/m0_62338174/article/details/135573281
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。