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

news/2024/2/24 8:50:55/文章来源:https://blog.csdn.net/m0_62338174/article/details/135573281

目录

 一、简介

二、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.luyixian.cn/news_show_925373.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python统计分析——操作案例(模拟抽样)

参考资料&#xff1a;用python动手学统计学 import numpy as np import pandas as pd from matplotlib import pyplot as plt import seaborn as snsdata_setpd.read_csv(r"C:\python统计学\3-4-1-fish_length_100000.csv")[length] #此处将文件路径改为自己的路…

centos 7 上如何安装chrome 和chrome-driver

centos 7 上如何安装chrome 和chrome-driver 查找自己的服务器是什么系统 cat /etc/os-release这里以centos linux 7为例 下载google-chrome安装包 wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm安装chrome sudo yum localinstall go…

从 PDF 删除PDF 页面的 10 大工具

PDF 文件是全世界几乎每个人最常用的页面之一。借助 PDF 文件&#xff0c;您可以通过任何在线或离线媒体轻松共享信息。但是&#xff0c;如果您想编辑这些 PDF 文件&#xff0c;那么这个过程就很难改变&#xff0c;因为保持文件的原始形式和质量很重要。应该注意的是&#xff0…

机器学习激活函数

激活函数 激活函数是人工神经网络中的一个重要组成部分。它们用于向神经网络中添加非线性因素&#xff0c;使得网络能够解决复杂问题&#xff0c;如图像识别、语言处理等。激活函数的作用是决定一个神经元是否应该被激活&#xff0c;也就是说&#xff0c;它帮助决定神经元的输…

NLP论文阅读记录 - 2022 | WOS 用于摘要法律文本的有效深度学习方法

文章目录 前言0、论文摘要一、Introduction1.1目标问题 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Effective deep learning approaches for summarization of legal texts&#xff08;22&#x…

android 13.0 Launcher3长按app弹窗设置为圆角背景功能实现二

1.前言 在13.0的系统ROM定制化开发中,在进行一些Launcher3的定制化开发中,在使用app的弹窗的功能时,会弹出应用信息和 微件之类的内容,所以在定制需求中,需要默认设置为圆角背景,接下来就来分析下相关功能的实现如图: 2.Launcher3长按app弹窗设置为圆角背景功能实现二的…

基于深度学习的婴儿啼哭识别项目详解

基于深度学习的婴儿啼哭识别项目详解 基于深度学习的婴儿啼哭识别项目详解一、项目背景1.1 项目背景1.2 数据说明 二、PaddleSpeech环境准备三、数据预处理3.1 数据解压缩3.2 查看声音文件3.3 音频文件长度处理 四、自定义数据集与模型训练4.1 自定义数据集4.2 模型训练4.3 模型…

【ACL 2023】 The Art of Prompting Event Detection based on Type Specific Prompts

【ACL 2023】 The Art of Prompting: Event Detection based on Type Specific Prompts 论文&#xff1a;https://aclanthology.org/2023.acl-short.111/ 代码&#xff1a;https://github.com/VT-NLP/Event_APEX Abstract 我们比较了各种形式的提示来表示事件类型&#xff0…

C#,入门教程(66)——枚举Enum的高等用法

前言&#xff1a;国内码农与国外优秀程序员的最大区别是&#xff0c;我们的专家、教授喜欢唾沫横飞地&#xff0c;夸夸其谈语言特性、框架、性能&#xff0c;唯一目的是带私货&#xff08;书籍或教程&#xff09;&#xff0c;很少能写出真有用的程序。差距在哪呢&#xff1f;基…

扫雷游戏棋盘的打印,判断输赢,深度分析

少年们&#xff0c;大家好&#xff0c;我是博主那一脸阳光&#xff0c;我来分享扫雷的打印和判断输赢&#xff0c;代码如何编写&#xff0c;如何使用&#xff0c;深度理解扫雷的游戏。 数据结构的分析和理论 我上次介绍棋盘的初始化&#xff0c;但是如果不打印出来&#xff0…

图解智慧:数据可视化如何助你高效洞悉信息?

在信息爆炸的时代&#xff0c;数据扮演着越来越重要的角色&#xff0c;而数据可视化则成为解读和理解海量数据的得力工具。那么&#xff0c;数据可视化是如何帮助我们高效了解数据的呢&#xff1f;下面我就以可视化从业者的角度来简单聊聊这个话题。 无需深奥的专业知识&#x…

【Leetcode 2707】字符串中的额外字符 —— 动态规划

2707. 字符串中的额外字符 给你一个下标从0开始的字符串s和一个单词字典dictionary。你需要将s分割成若干个互不重叠的子字符串&#xff0c;每个子字符串都在dictionary中出现过。s中可能会有一些额外的字符不在任何子字符串中。 请你采取最优策略分割s&#xff0c;使剩下的字…

【ONE·MySQL || 常见的基本函数】

总言 主要内容&#xff1a;介绍了MySQL中常用的基本函数。一些聚合函数、时间日期函数、字符串函数、数字函数等。       文章目录 总言1、聚合函数1.1、汇总1.2、COUNT()函数1.2.1、基本说明1.2.2、使用演示 1.3、SUM( )函数1.3.1、基本说明1.3.2、使用演示 1.4、AVG( )函…

java基础知识点系列——数据输入(五)

java基础知识点系列——数据输入&#xff08;五&#xff09; 数据输入概述 Scanner使用步骤 &#xff08;1&#xff09;导包 import java.util.Scanner&#xff08;2&#xff09;创建对象 Scanner sc new Scanner(System.in)&#xff08;3&#xff09;接收数据 int i sc…

PHP开发日志 ━━ php8.3安装与使用组件Xdebug

今天开头写点历史&#xff1a; 二十年前流行asp&#xff0c;当时用vb整合常用函数库写了一个dll给asp调用&#xff0c;并在此基础上开发一套仿windows界面的后台管理系统&#xff1b;后来asp逐渐没落&#xff0c;于是在十多年前转投php&#xff0c;不久后用php写了一套mvc框架&…

C++——map和set的基本使用

目录 一&#xff0c;关联式容器 二&#xff0c;键值对 三&#xff0c;set的使用 3.1 set介绍 3.2 set的插入和删除 3.3 set的pair 3.4 multiset 四&#xff0c;map的使用 4.1 map介绍 4.2 map实现简易字典 4.3 map实现统计次数 4.4 map的[] 五&#xff0c;使用map或…

TRB 2024论文分享:基于生成对抗网络和Transformer模型的交通事件检测混合模型

TRB&#xff08;Transportation Research Board&#xff0c;美国交通研究委员会&#xff0c;简称TRB&#xff09;会议是交通研究领域知名度最高学术会议之一&#xff0c;近年来的参会人数已经超过了2万名&#xff0c;是参与人数和国家最多的学术盛会。TRB会议几乎涵盖了交通领域…

【REST2SQL】07 GO 操作 Mysql 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 MySQL是一个关系型数据库管理系统&#xf…

系统性学习vue-vue核心

做了三年前端,但很多系统性的知识没有学习 还是从头系统学习一遍吧 课程是b站的Vue2.0Vue3.0课程 后续还会学习的如下,就重新开一篇了,不然太长,之后放链接 vue组件化编程 vue-cli 脚手架 vue中的ajax vue-router vuex element-ui vue3 老师推荐的vscode针对vue的插件: Vue 3…

在线项目实习|2024寒假项目实战火热报名中!

一、在线实习项目分类 二、在线实习项目流程 三、在线实习项目优惠及项目特色 1、师傅带练教学模式&#xff0c;手把手教你掌握 采用“师带徒”的教学模式&#xff0c;课程以“项目前置知识学习 师傅带练 项目实战”贯穿&#xff0c;强调动手实操&#xff0c;内容以代码落地为…