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

news2024/9/24 11:24:14

目录

 一、简介

二、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在项目中的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接雨水的四种姿势——一篇文章彻底弄懂接雨水问题

前言 leetcode 42. 接雨水是一道业内著名的hard题&#xff0c;多次出现在面试场上&#xff0c;经久不衰&#xff0c;难住了一届又一届的候选人。 作为leetcode上热度最高的题目之一&#xff0c;题目评论区也是好一番热闹景象。有人表示看了三天做不出来&#xff0c;有人在评论…

运用tomcat在浏览器中对数据库信息进行查询

在idea中创建好项目后&#xff0c;添加web项目 然后打开idea的setting&#xff0c;跳转到下面的页面&#xff0c;下载maven插件。 出现下面的选项&#xff0c;才正确。 添加好web项目后&#xff0c;打开pom文件&#xff0c;添加相应的依赖&#xff1a; <?xml version"…

基于SpringBoot+Vue实现的二手交易系统

系统介绍 校园二手交易网站是一种专门针对有二手物品交易需求用户的二手交易的网站。它的设计和开发主要是为了满足用户之间的二手物品交易需求&#xff0c;方便大家在线买卖二手物品。近年来&#xff0c;随着互联网技术的发展&#xff0c;人们越来越喜欢在线购物&#xff0c;…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了&#xff0c;需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

滴水内存地址堆栈

两个十六进制数 刚好是一个字节刚好 DC这的一个字节数据为E4 一个内存地址 后面表示四个字节的数据 所以有八个十六进制的数 BASE是高地址 所以放入一个四字节后就 -4

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例

文章目录 1.XtraBackup备份工具的简介2.XBK备份工具的安装3.XBK备份工具的使用语法4.XBK备份前的准备5.使用XBK对全库进行备份5.1.XBK备份全库数据的语法格式5.2.使用XBK进行全库备份5.3.查看XBK备份的数据文件5.4.备份过程中生产的XBK文件 6.模拟故障案例并使用XBK恢复备份的数…

驾驭数字孪生:智慧水利的未来之路

一、数字孪生技术的原理与实践 随着科技的不断进步&#xff0c;数字孪生技术作为一项创新的技术应用&#xff0c;正在逐渐改变我们的生活和工作方式。特别是在工业领域&#xff0c;数字孪生技术被视为实现智能制造、提升生产效率和产品质量的重要手段。本章节将深入探讨数字孪…

git修改最新提交(commit)信息

一、修改最近一次commit信息 1、首先通过git log查看commit信息 2、使用命令git commit --amend进入命令命令模式&#xff0c;按i进入编辑模式&#xff0c;修改好commit信息后按Esc键退出编辑模式&#xff0c;然后输入:wq保存编辑信息&#xff08;注意使用英文输入法&#xf…

[Vulnhub靶机] DriftingBlues: 7

[Vulnhub靶机] DriftingBlues: 7靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues7_vh.ova 靶机地址&#xff1a;192.168.67.27 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法&#xff0c;由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能&#xff0c;特别是在处理图像中的细微部分&#xf…

Kubernetes (十一) 存储——Secret配置管理

一. 简介 从文件创建 echo -n admin > ./username.txt echo -n westos > ./password.txt kubectl create secret generic db-user…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑥

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax&#xff1a;”&#xff08;x为2、3或4&#xff09;&#xff1b;其中变量x、y均须为整型。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码进行测试…

【python】进阶--->MySQL数据库(二)

一、sql语句(结构化查询语言) 要和数据库进行交互,需要使用到数据库认识的语言 : sql语句 是关系型数据库都需要遵循的规范。不同数据库都支持sql语句,但是都有特有内容。 二、sql语句分类 数据定义语言 : 用来定义数据库–数据库,表,列. 数据操作语言 : 对数据库表中的记录进…

蓝桥杯回文日期判断

思想&#xff1a;对于回文数的判断方法&#xff0c;最快的就是取其中一半的字符串长度&#xff0c;为s&#xff0c;然后将其进行翻转为s’ &#xff0c;再把两者进行拼接即可保证是回文数&#xff0c;这样子就解决了枚举所有回文数的问题。 注意点&#xff1a; 要求必须是有效…

交叉编译ARM64架构electron详解

基本介绍 本文主要参考Electron官方文档中 构建说明 和 构建步骤(Linux) 在amd64环境内构建arm64的electron包。 如果是arm64环境请查看文章arm64架构编译electron长征路 一、环境说明 操作系统版本:统信1060 操作系统架构:amd64 内存:32G 如下图: electron版本:v25…

k8s 部署Jenkins项目

1、基于helm 部署jenkins 要求&#xff1a;当前集群配置了storageClass&#xff0c;并已指定默认的storageClass&#xff0c;一般情况下&#xff0c;创建的storageClass即为默认类 指定默认storageClass的方式 # 如果是新创建默认类&#xff1a; apiVersion: storage.k8s.io/v1…

图像异或加密及唯密文攻击

异或加密 第一种加密方式为异或加密&#xff0c;异或加密的原理是利用异或的可逆性质&#xff0c;原始图像的像素八位bit分别与伪随机二进制序列异或&#xff0c;得到的图像就为加密图像。如下图对lena图像进行加密。 伪随机序列为一系列二进制代码&#xff0c;它受加密秘钥控…

数据结构入门到入土——栈(Stack)和队列(Queue)

目录 一&#xff0c;栈&#xff08;Stack&#xff09; 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1.5 栈&#xff0c;虚拟机栈&#xff0c;栈帧有什么区别&#xff1f; 二&#xff0c;队列&#xff08;Queue&#xff09; 2.1 概念 2.2 队列的使用 2.3 …

Jenkins实现基础CI操作配合python

条件&#xff1a; gitlab准备好 jenkins准备好 (不会java项目, 故跳过Maven打jar包) jenkins配置 在配置里通过插件Git Parameter配置Git&#xff0c;以便于从gitlab 拉去代码到Jenkins r容器内 /var/jenkins_home/ 刚接触python 项目好像不需要构建&#xff0c;直接推送到远…

桌面显示器type-c接口方案6020

TYPE-C接口桌面显示器&#xff0c;与传统的显示器不同的是 新一类的显示器不仅仅支持视频传输&#xff0c;还可以利用显示器的DC电源转成PD协议充电给设备端&#xff08;笔记本&#xff0c;任天堂等HOST设备&#xff09;充电。 这种新型的TYPE-C接口桌面显示器&#xff0c;不仅…