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

news2024/11/20 20:22:31

目录

一、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.coloradmin.cn/o/1384090.html

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

相关文章

memory泄露分析方法(java篇)

#memory泄露主要分为java和native 2种&#xff0c;本文主要介绍java# 测试每天从monkey中筛选出内存超标的app&#xff0c;提单流转到我 首先&#xff0c;辨别内存泄露类型&#xff08;java&#xff0c;还是native&#xff09; 从采到的dumpsys_meminfo_pid看java heap&…

IPv6组播--SSM Mapping

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

【用法总结】无障碍AccessibilityService

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

【手搓深度学习算法】用逻辑回归分类Iris数据集-线性数据篇

用逻辑回归分类Iris数据集-线性数据篇 前言 逻辑斯蒂回归是一种广泛使用的分类方法&#xff0c;它是基于条件概率密度函数的最大似然估计的。它的主要思想是将输入空间划分为多个子空间&#xff0c;每个子空间对应一个类别。在每个子空间内部&#xff0c;我们假设输入变量的取…

肯·汤普逊 :我心目中的神,好像真正无敌之上的大佬都对C++提出了批判!大佬们的思想像红太阳太耀眼,常人不能直视

肯尼斯蓝汤普逊&#xff08;英语&#xff1a;Kenneth Lane Thompson&#xff0c;1943年2月4日—&#xff09;&#xff0c;小名肯汤普逊&#xff08;英语&#xff1a;Ken Thompson&#xff09;&#xff0c;美国计算机科学学者和工程师。黑客文化圈子通常称他为“ken”[1]。在贝尔…

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…

Keil5如何生成反汇编文件

Keil5如何生成反汇编文件 在Keil5界面下点击选项&#xff0c;选择“User”&#xff0c;勾选“After Build/Rebuild”中“RUN #1”&#xff0c;复制fromelf --text -a -c --outputxxx.dis xxx.axf 在Linker栏中找到“Linker Control string”里最后-o后的.axf文件&#xff0c;将…

对资金类服务幂等设计与测试的思考

之前写过一篇《系统设计的幂等性》科普文章。 幂等性原本是数学上的概念&#xff0c;用在接口上就可以理解为&#xff1a;同一个接口&#xff0c;多次发出同一个请求&#xff0c;必须保证操作只执行一次。调用接口发生异常并且重复尝试时&#xff0c;总是会造成系统所无法承受的…

lenovo联想笔记本电脑拯救者Legion Y7000 2019 PG0(81T0)原装出厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1fn0aStc4sfAfgyOKtMiCCA?pwdas1l 提取码&#xff1a;as1l 联想拯救者原厂Win10系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-1 表单

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>表单</title> </head><body> <!--<form action"URL地址" method"提交方式" name"表单名称" /*编码“多部…

数据在AI图像修复任务中的核心作用

在人工智能&#xff08;AI&#xff09;领域&#xff0c;数据的重要性不言而喻。尤其在图像修复任务中&#xff0c;数据的精度和质量直接影响着AI模型的性能。图像修复是指利用AI技术自动识别图像中的缺陷或遮挡物&#xff0c;并对其进行修复或还原的过程。这项技术广泛应用于各…

持续赋能波卡生态创新,OneBlock+ 社区 2023 年度回顾

OneBlock 开发者社区成立于 2018 年&#xff0c;历经五年的积累与沉淀&#xff0c;已经成长为行业内领先的 Substrate 开发者社区。我们以成熟的社区生态&#xff0c;通过 Substrate 技术与波卡生态的相关优质文章、项目方与开发者专访、线上线下技术热点对谈、多阶段开发者课程…

【设计模式】什么场景可以考虑使用简单工厂模式

1.概述 工厂模式是一种创建型模式&#xff0c;主要作用就是创建对象&#xff0c;将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称&#xff0c;简单工厂、工厂方法、抽象工厂&#xff0c;而在23种设计模式中&#xff0c;只…

AI绘画风格化实战

在社交软件和短视频平台上&#xff0c;我们时常能看到各种特色鲜明的视觉效果&#xff0c;比如卡通化的图片和中国风的视频剪辑。这些有趣的风格化效果其实都是图像风格化技术的应用成果。 风格化效果举例 MidLibrary 这个网站提供了不同的图像风格&#xff0c;每一种都带有鲜…

Linux的DHCP工作原理和dns服务器

目录 一、DHCP原理 1.DHCP的好处 2.DHCP的分配方式 3.实验 二、dns服务器 1.什么是dns 2.dns域名解析 3、在内网搭建dns 一、DHCP原理 DCHP工作原理使用C/S架构 &#xff08;1&#xff09;第一步&#xff0c;客户端广播发送一个discover报文寻找DHCP服务器。 &#…

使用CentOS搭建高性能静态HTTP服务器

在互联网应用中&#xff0c;静态内容是广泛存在的&#xff0c;例如HTML页面、图片、视频等。为了提供高效、稳定和安全的静态内容服务&#xff0c;我们可以使用CentOS来搭建高性能的静态HTTP服务器。 1. 选择合适的软件 Nginx和Apache是两个流行的HTTP服务器软件。Nginx以其高…

探索二维码:让信息传递更便捷

二维码是一种用于储存信息的方形图形编码&#xff0c;它可以在多种场景中实现信息的快速传递和识别。本文将从多个方面介绍二维码的原理、类型、优势及应用场景&#xff0c;帮助您深入了解这一重要的物联网技术。 二维码生成器 | 一个覆盖广泛主题工具的高效在线平台(amd794.c…

以太网抓包软件Wireshake应用介绍( SMART PLC MODBUSTCP通信)

首先介绍下常看到的字符ACK,ACK是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误。在TCP/IP协议中,如果接收方成功的接收到数据,会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。ACK在TCP的…

C# 静态代码织入AOP组件之肉夹馍

写在前面 关于肉夹馍组件的官方介绍说明&#xff1a; Rougamo是一个静态代码织入的AOP组件&#xff0c;同为AOP组件较为常用的有Castle、Autofac、AspectCore等&#xff0c;与这些组件不同的是&#xff0c;这些组件基本都是通过动态代理IoC的方式实现AOP&#xff0c;是运行时…

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

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