当前位置: 首页 > news >正文

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

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

相关文章:

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

目录 一、C中STL&#xff08;Standard Template Library&#xff09; 二、 Gun源代码开发精神 三、 实现版本 四、GNU C库的头文件分布 bits目录 ext目录 backward目录 iostream目录 stdexcept目录 string目录 上一篇文章&#xff1a; C标准模板库&#xff08;STL&am…...

Spring之AOP源码(二)

书接上文 文章目录 一、简介1. 前文回顾2. 知识点补充 二、ProxyFactory源码分析1. ProxyFactory2. JdkDynamicAopProxy3. ObjenesisCglibAopProxy 三、 Spring AOP源码分析 一、简介 1. 前文回顾 前面我们已经介绍了AOP的基本使用方法以及基本原理&#xff0c;但是还没有涉…...

VS code console.log快捷键设置 :console.log(‘n>>>‘,n)

vscode设置log快捷显示&#xff1a; 一、打开 VS Code&#xff0c;并进入菜单栏选择 “文件”&#xff08;File&#xff09;-> “首选项”&#xff08;Preferences&#xff09;-> “用户代码片段”&#xff08;User Snippets&#xff09;。 二、在弹出的下拉菜单中选择 …...

ZooKeeper 简介

1、概念介绍 ZooKeeper 是一个开放源码的分布式应用程序协调服务&#xff0c;为分布式应用提供一致性服务的软件&#xff0c;由雅虎创建&#xff0c;是 Google Chubby 的开源实现&#xff0c;是 Apache 的子项目&#xff0c;之前是 Hadoop 项目的一部分&#xff0c;使用 Java …...

rke2 Online Deploy Rancher v2.8.0 latest (helm 在线部署 rancher v2.8.0)

文章目录 1. 简介2. 预备条件3. 安装 helm4. 安装 cert-manager4.1 yaml 安装4.2 helm 安装 5. 安装 rancher6. 验证7. 界面预览 1. 简介 Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托…...

k8s实战从入门到上天系列第一篇:K8s微服务实战内容开篇介绍

前言 我们使用开源ruoyi微服务基本使用&#xff0c;基于基本的微服务实践。我们来讲解k8s的实战内容。 第一章&#xff1a;开源ruoyi微服务简介基本使用 第二章&#xff1a;k8s基本知识回顾、k3s集群搭建和基本使用 第三章&#xff1a;微服务镜像构建 第四章&#xff1a;中间件…...

统一网关 Gateway【微服务】

文章目录 1. 前言2. 搭建网关服务3. 路由断言工厂4. 路由过滤器4.1 普通过滤器4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 前言 通过前面的学习我们知道&#xff0c;通过 Feign 就可以向指定的微服务发起 http 请求&#xff0c;完成远程调用。但是这里有一个问题&am…...

【征服redis1】基础数据类型详解和应用案例

博客计划 &#xff0c;我们从redis开始&#xff0c;主要是因为这一块内容的重要性不亚于数据库&#xff0c;但是很多人往往对redis的问题感到陌生&#xff0c;所以我们先来研究一下。 本篇&#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…...

【WPF.NET开发】WPF中的XAML资源

本文内容 使用 XAML 中的资源静态和动态资源静态资源动态资源样式、DataTemplate 和隐式键 资源是可以在应用中的不同位置重复使用的对象。 资源的示例包括画笔和样式。 本概述介绍如何使用 Extensible Application Markup Language (XAML) 中的资源。 你还可以使用代码创建和…...

ChatGPT 淘金潮(全)

原文&#xff1a;The ChatGPT GoldRush 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 一、ChatGPT 简介 什么是 ChatGPT&#xff1f; ChatGPT 是由 OpenAI 基于 GPT-4 架构创建的大型语言模型。它旨在理解和回应自然语言文本输入&#xff0c;使得可以与机器进行对话…...

【零基础入门Python数据分析】Anaconda3 JupyterNotebookseaborn版

目录 一、安装环境 python介绍 anaconda介绍 jupyter notebook介绍 anaconda3 环境安装 解决JuPyter500&#xff1a;Internal Server Error问题-CSDN博客 Jupyter notebook快捷键操作大全 二、Python基础入门 数据类型与变量 数据类型 变量及赋值 布尔类型与逻辑运算…...

C++面试:单例模式、工厂模式等简单的设计模式 创建型、结构型、行为型设计模式的应用技巧

理解和能够实现基本的设计模式是非常重要的。这里&#xff0c;我们将探讨两种常见的设计模式&#xff1a;单例模式和工厂模式&#xff0c;并提供一些面试准备的建议。 目录 单例模式 (Singleton Pattern) 工厂模式 (Factory Pattern) 面试准备 1. 理解设计模式的基本概念…...

Oracle JDK 8 中的 computeIfAbsent 方法及实践

Java 8 引入了一系列新特性&#xff0c;其中之一是对 Map 接口的增强&#xff0c;其中包括了 computeIfAbsent 方法。这个方法为处理映射提供了一种便捷而强大的方式&#xff0c;允许在键不存在或对应的值为 null 时&#xff0c;动态计算新的值并将其放入映射。在本篇博客中&am…...

华为设备vlan下配置MSTP,STP选举

核心代码,不同实例&#xff0c;承载不同流量&#xff0c;为每个实例设置一个根网桥达到分流的效果 stp region-config //进入stp区域的设置 region-name R1 //区域命名为R1 instance 1 vlan 10 …...

案例学Python:filter()函数的用法,高级!

大家好&#xff0c;这里是程序员晚枫&#xff0c;又来分享有用的Python知识了。 Python之所以好用&#xff0c;是因为有大量用于科学计算的内置函数和第三方库。用好这些第三方库&#xff0c;可以显著提高我们编程的速度和质量。 今天我们一起来看一下Python中一个重要的内置…...

jmeter--7.BeanShell

目录 1. beanshell常用语法 1.1 log&#xff1a;日志写入 1.2 vars&#xff1a;设置和引用局部变量&#xff08;同线程组&#xff09; 1.3 props&#xff1a;设置和引用全局变量&#xff08;跨线程组&#xff09; 1.4 prev&#xff1a;获取前一个请求返回的信息 2. beans…...

第 3 场 蓝桥杯小白入门赛 解题报告 | 珂学家 | 单调队列优化的DP + 三指针滑窗

前言 整体评价 T5, T6有点意思&#xff0c;这场小白入门场&#xff0c;好像没真正意义上的签到&#xff0c;整体感觉是这样。 A. 召唤神坤 思路: 前后缀拆解 #include <iostream> #include <algorithm> #include <vector> using namespace std;int main()…...

debian apt 装 mysql8

MySQL &#xff1a;&#xff1a; MySQL 8.0 参考手册 &#xff1a;&#xff1a; 2.5.5 使用来自 Oracle 的 Debian 软件包在 Linux 上安装 MySQL apt install -f lsb-release gnupg wget https://repo.mysql.com//mysql-apt-config_0.8.29-1_all.deb dpkg -i mysql-apt-config…...

LeetCode 每日一题 Day 37-43

终于考完试了&#xff0c;寒假期间将会每天持续更新&#xff01; 447. 回旋镖的数量(Day 37) 给定平面上 n 对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧…...

产品百度百科怎么创建?产品如何上百度百科?

百度百科作为一个权威的信息平台&#xff0c;承载着巨大的流量和曝光度。对于一个产品来说&#xff0c;能够在百度百科上拥有一席之地&#xff0c;无疑是一种极高的荣誉&#xff0c;同时也是提升品牌知名度、增加信任度的重要手段。产品百度百科不仅能够详细、全面地介绍产品信…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...