C++学习笔记——SLT六大组件及头文件

目录

一、C++中STL(Standard Template Library)

二、 Gun源代码开发精神

三、 实现版本

四、GNU C++库的头文件分布

bits目录

ext目录

backward目录

iostream目录

stdexcept目录

string目录


上一篇文章:

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

C++学习笔记——标准模板库-CSDN博客文章浏览阅读512次,点赞11次,收藏11次。C++标准模板库(STL)是C++的一个重要组成部分,它提供了一套丰富的通用数据结构和算法。STL以其高度模块化、可复用的特性,在C++编程中发挥着重要作用。本篇博客将带你深入了解STL,并介绍其常见的组件和使用方法。C++标准模板库(STL)是C++语言的一个标准库,它提供了一套通用的数据结构和算法,以支持高效的编程。STL的设计目标是使程序员能够以简洁、高效和可复用的方式开发代码。// 输出vector的大小return 0;https://blog.csdn.net/m0_62338174/article/details/135573281?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135573281%22%2C%22source%22%3A%22m0_62338174%22%7D 

一、C++中STL(Standard Template Library)

包含六大组件,它们分别是:

  1. 容器(Containers):提供了数据存储的功能。有vector、list、map等常用容器。

  2. 算法(Algorithms):提供了大量的算法,包括排序、查找、拷贝、合并等。有sort、find、copy、merge等常用算法。

  3. 迭代器(Iterators):提供了一种访问容器元素的方式,可以对容器进行遍历。有输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器等类型。

  4. 函数对象(Function Objects):封装了一个函数或者函数指针,可以像使用函数一样使用它。有unary_function、binary_function等类型。

  5. 适配器(Adapters):将一种容器或者迭代器转换为另一种容器或者迭代器。有stack、queue、priority_queue、reverse_iterator等类型。

  6. 分配器(Allocators):管理内存分配和释放,可以自定义分配器来满足特定需求。有allocator等类型。

这六大组件共同构成了STL,为C++中的程序设计提供了高效、方便、可靠的工具。

二、 Gun源代码开发精神

GNU源代码开发精神(GNU Philosophy)是指由理查德·斯托曼(Richard Stallman)提出的一种软件开发理念和价值观。它的核心思想是自由软件和开放源代码,主要体现在以下几个方面:

  1. 自由软件(Free Software):根据GNU的定义,自由软件是指用户可以自由地运行、复制、分发、研究、修改和改进的软件。自由软件注重用户的权利,强调用户对软件的控制和自由选择。

  2. 开放源代码(Open Source):开放源代码是指软件源代码对公众开放,并允许用户查看、修改和重新发布的软件。开放源代码强调源代码的可访问性和透明度,鼓励社区合作和共享。

  3. GNU通用公共许可证(GNU General Public License,GPL):GPL是GNU项目下的主要许可证,它保护了软件的自由性,确保用户在任何使用、修改和分发软件时都能保持相同的自由。

  4. 社区合作和分享:GNU的开发精神鼓励合作、共享和互助。通过社区的参与和协作,开发者可以共同推进软件的发展,分享经验和知识。

GNU源代码开发精神的目标是让用户能够控制和定制自己使用的软件,避免对专有软件的依赖和束缚。它强调软件自由、用户权利和社区合作,为自由软件运动的发展做出了重要贡献。

三、 实现版本

C++实现版本是指用于编译、执行C++代码的具体工具链或环境的版本。以下是一些常见的C++实现版本:

  1. GCC(GNU Compiler Collection):GCC是一个开源的C++编译器集合,由GNU组织开发和维护。它支持多种平台,并有不同的版本可用,如GCC 9.3.0、GCC 10.2.0等。

  2. Clang:Clang是LLVM项目的一部分,也是一个流行的C++编译器。它被设计为高度可扩展且易于集成到其他项目中。Clang的版本号通常以LLVM版本号为基础,如Clang 12.0.0、Clang 13.0.0等。

  3. Microsoft Visual C++:Microsoft Visual C++是微软的C++编译器,用于Windows平台上的开发。它的版本号通常与Visual Studio集成开发环境(IDE)的版本号相对应,如Visual C++ 2019。

这些是一些常见的C++实现版本,每个版本都有自己的特性和优化。选择适合您项目需求的C++实现版本非常重要,它可能会影响编译器的功能、性能和兼容性。

四、GNU C++库的头文件分布

在不同的目录中,每个目录下包含了相关的头文件。以下是主要的头文件目录及其内容:

bits目录

位于/usr/include/c++/<version>/bits目录下,包含了C++标准库的内部实现细节。这些头文件通常不直接使用,而是由其他头文件引用。例如,stl_algo.h包含了算法函数的实现,stl_vector.h包含了vector容器的实现。

ext目录

位于/usr/include/c++/<version>/ext目录下,包含了GNU扩展的头文件。这些头文件提供了一些非标准的、但在GNU C++库中常用的函数和类定义。例如,ext/algorithm头文件提供了额外的算法函数,ext/pool_allocator头文件定义了一个特殊的分配器等。

backward目录

位于/usr/include/c++/<version>/backward目录下,包含了向后兼容的头文件。这些头文件用于支持旧版本的C++代码,并提供了对已弃用的功能和接口的支持。

iostream目录

位于/usr/include/c++/<version>目录下,包含了输入输出相关的头文件。例如,iostream头文件提供了输入输出功能,fstream头文件提供了文件输入输出功能。

stdexcept目录

位于/usr/include/c++/<version>目录下,包含了异常处理相关的头文件。例如,exception头文件定义了基本的异常类,stdexcept头文件定义了一些标准异常类,如runtime_errorlogic_error等。

string目录

位于/usr/include/c++/<version>目录下,包含了字符串操作相关的头文件。例如,string头文件定义了std::string类和相关函数,cstring头文件定义了一些C风格字符串处理的函数。

除了上述目录外,还有其他目录包含了不同功能和组件的头文件,例如:

  • vectorlistmap等容器的头文件位于/usr/include/c++/<version>/<container>目录下。例如,vector头文件位于/usr/include/c++/<version>/vector目录中。

  • algorithmnumeric等算法的头文件位于/usr/include/c++/<version>/<algorithm>目录下。例如,algorithm头文件位于/usr/include/c++/<version>/algorithm目录中。

  • threadmutex等多线程编程的头文件位于/usr/include/c++/<version>/<thread>目录下。例如,thread头文件位于/usr/include/c++/<version>/thread目录中。

下面是一个示例代码,展示了如何使用GNU C++库中的头文件:

#include <iostream> // 输入输出相关头文件
#include <vector>   // vector容器头文件
#include <algorithm> // 算法头文件

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

    // 使用算法对容器中的元素进行排序
    std::sort(numbers.begin(), numbers.end());

    // 输出排序后的结果
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

以上代码包含了iostreamvectoralgorithm等头文件,并使用了这些头文件中定义的类和函数。它创建了一个存储整数的vector容器,使用sort算法对容器中的元素进行排序,并将排序后的结果输出到控制台。

以上示例代码的结果是:

1 2 3 5 8

即将容器中的元素从小到大排序后输出。

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

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

相关文章

光猫(无限路由器)插入可移动硬盘搭建简易版的NAS

1.场景分析 最近查询到了许多有关NAS的资料&#xff0c;用来替代百度云盘等确实有很多优势&#xff0c;尤其是具有不限速&#xff08;速度看自己配置&#xff09;、私密性好、一次投入后续只需要电费即可等优势。鉴于手上没有可以用的资源-cpu、机箱、内存等&#xff0c;查询到…

ISO11898-闭环高速CAN网络 (125K~1Mbps)

ISO11898 标准的物理框图如下图 可理解为一个高速闭环 CAN 总线网络&#xff1b;CAN 闭环总线网络允许总线最大长度为 40m;最高速度为 1Mbps;可以看到总线的两端各有一个 120Ω 的电阻&#xff0c;此电阻作为阻抗匹配功能&#xff0c;以减少回波反射;节点就是不同的设备&#…

Embeddings: What they are and why they matter

embeddings 是什么意思https://simonwillison.net/2023/Oct/23/embeddings/推荐原因&#xff1a;GPT 模型的基础是一种叫做 embeddings 的技术&#xff0c;用来将文本转换成向量&#xff0c;从而可以计算出文本之间的相似度。这篇文章详细地介绍了embeddings及应用 Embeddings…

HTML--CSS--边框、列表、表格样式

边框样式 属性&#xff1a; border-width 边框宽度 border-style 边框外观 border-color 边框颜色 需要同时设定三个属性 border-width 边框宽度 取值为像素值 border-style 边框样式 none 无样式 dashed 虚线 solid 实线 border-color 边框颜色 如示例&#xff1a; 为div设…

NLP论文阅读记录 - 2021 | WOS 使用深度强化学习及其他技术进行自动文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1. Seq2seq 模型2.2.强化学习和序列生成2.3.自动文本摘要 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Auto…

Python Matplotlib 动画教程:提高可视化吸引力的强大工具【第24篇—python:Matplotlib】

文章目录 &#x1f356; 方法一&#xff1a;使用pause()函数&#x1f680; 方法二&#xff1a;使用FuncAnimation()函数&#x1f94b; 线性图动画&#xff1a;&#x1f3bb; Python中的条形图追赶动画&#x1f30c; Python中的散点图动画&#xff1a;&#x1f6f9; 条形图追赶的…

<软考高项备考>《论文专题 - 65 质量管理(4) 》

4 过程3-管理质量 4.1 问题 4W1H过程做什么为了评估绩效&#xff0c;确保项目输出完整、正确且满足客户期望&#xff0c;而监督和记录质量管理活动执行结果的过程作用&#xff1a;①核实项目可交付成果和工作已经达到主要干系人的质量要求&#xff0c;可供最终验收;②确定项目…

乐意购项目前端开发 #2

一、Axios的安装和简单封装 安装Axios npm install axios在utils目录下创建 http.js 文件, 内容如下 import axios from axios// 创建axios实例 const http axios.create({baseURL: http://localhost:9999,//后端服务器地址timeout: 5000 })// axios请求拦截器 http.interc…

【用法总结】无障碍AccessibilityService

一、背景 本文仅用于做学习总结&#xff0c;转换成自己的理解&#xff0c;方便需要时快速查阅&#xff0c;深入研究可以去官网了解更多&#xff1a;官网链接点这里 之前对接AI语音功能时&#xff0c;发现有些按钮&#xff08;或文本&#xff09;在我没有主动注册唤醒词场景…

【JAVA】在 Queue 中 poll()和 remove()有什么区别

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 poll() 方法&#xff1a; remove() 方法&#xff1a; 区别总结&#xff1a; 结语 我的其他博客 前言 在Java的Queue接口中&…

计算机找不到msvcp120.dll如何解决?总结五个可靠的教程

在计算机使用过程中&#xff0c;遇到“找不到msvcp120.dll”这一问题常常令人困扰。msvcp120.dll作为Windows系统中至关重要的动态链接库文件&#xff0c;对于许多应用程序的正常运行起着不可或缺的作用。那么&#xff0c;究竟是什么原因导致找不到msvcp120.dll呢&#xff1f;又…

Multi-View-Information-Bottleneck

encoder p θ ( z 1 ∣ v 1 ) _θ(z_1|v_1) θ​(z1​∣v1​)&#xff0c;D S K L _{SKL} SKL​ represents the symmetrized KL divergence. I ˆ ξ ( z 1 ; z 2 ) \^I_ξ(z_1; z_2) Iˆξ​(z1​;z2​) refers to the sample-based parametric mutual information estimatio…

vim升级和配置

vim升级和配置 1、背景2、环境说明3、操作3.1 升级VIM3.2 配置VIM3.2.1、编辑vimrc文件3.2.2、安装插件 1、背景 日常工作跟linux系统打交道比较多&#xff0c;目前主要用到的是Cenots7和Ubuntu18这两个版本的linux系统&#xff0c;其中Centos7主要是服务器端&#xff0c;Ubun…

如何开启文件共享及其他设备如何获取

1.场景分析 日常生活中&#xff0c;常常会遇到多台电脑共同办公文件却不能共享的问题&#xff0c;频繁的用移动硬盘、U盘等拷贝很是繁琐&#xff0c;鉴于此&#xff0c;可以在同一内网环境下设置共享文件夹&#xff0c;减少不必要的文件拷贝工作&#xff0c;提升工作效率。废话…

Maven《一》-- 一文带你快速了解Maven

目录 &#x1f436;1.1 为什么使用Maven 1. Mavan是一个依赖管理工具 ①jar包的规模 ②jar包的来源问题 ③jar包的导入问题 ④jar包之间的依赖 2. Mavan是一个构建工具 ①你没有注意过的构建 ②脱离IDE环境仍需构建 3. 结论 &#x1f436;1.2 什么是Maven &#x…

C语言数据结构(1)复杂度(大o阶)

欢迎来到博主的专栏——C语言与数据结构 博主ID——代码小豪 文章目录 如何判断代码的好坏时间复杂度什么是时间复杂度如何计算时间复杂度 空间复杂度 如何判断代码的好坏 实现相同作用的不同代码&#xff0c;如何分辨这些代码的优劣之处呢&#xff1f; 有人说了&#xff0c…

stm32学习笔记:USART串口通信

1、串口通信协议&#xff08;简介软硬件规则&#xff09; 全双工&#xff1a;打电话。半双工&#xff1a;对讲机。单工&#xff1a;广播 时钟&#xff1a;I2C和SPI有单独的时钟线&#xff0c;所以它们是同步的&#xff0c;接收方可以在时钟信号的指引下进行采样。串口、CAN和…

行业内参~移动广告行业大盘趋势-2023年12月

前言 2024年&#xff0c;移动广告的钱越来越难赚了。市场竞争激烈到前所未有的程度&#xff0c;小型企业和独立开发者在巨头的阴影下苦苦挣扎。随着广告成本的上升和点击率的下降&#xff0c;许多原本依赖广告收入的创业者和自由职业者开始感受到前所未有的压力。 &#x1f3…

IPv6组播--SSM Mapping

概念 SSM(Source-Specific Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。 如果成员主机上运行MLDv2,可以在MLDv2报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行MLDv1,为了使其也能够使用SSM服务,组播路由器上需要提…

swing快速入门(四十)JList、JComboBox实现列表框

注释很详细&#xff0c;直接上代码 上一篇 新增内容 &#x1f9e7;1.列表的属性设置与选项监听器 &#x1f9e7;2.下拉框的属性设置与选项监听器 &#x1f9e7;3.Box中组件填充情况不符合预期的处理方法 &#x1f9e7;4.LIst向Vector的转化方法 源码&#xff1a; package swing…
最新文章