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.mzph.cn/news/622335.shtml

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

相关文章

原生js实现拖拽效果

<!DOCTYPE html> <html> <head> <style> #mydiv { width: 200px; height: 200px; background-color: red; position: absolute; cursor: move; } </style> | </head> <body> <div id"mydiv">拖拽我…

什么是信噪比

大家好&#xff0c;今天给大家介绍什么是信噪比&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 “信噪比”是电子技术中经常用到的一个词组&#xff0c;知道它的确切含义有一定意…

vivado18.3和modelsim关联

版本关系 首先明确Modelsim与Vivado的联合仿真需要版本号相匹配&#xff0c;Xilinx官方文档UG973中给出了所有版本的Vivado兼容Modelsim的版本情况 Vivado版本号Modelsim版本号Vivado Design Suite 2022.2Mentor Graphics ModelSim DE (2022.2)Vivado Design Suite 2022.1Men…

【前端性能优化】如何取消http请求

文章目录 需要取消http请求的3种经典场景原生XMLHttpRequest取消http请求fetch取消http请求axios取消http请求哪些情况需要取消HTTP请求取消http请求能带来哪些性能提升 需要取消http请求的3种经典场景 场景一&#xff1a;有一个实时搜索功能&#xff0c;每当用户输入内容改变的…

app开发——安卓native开发思路记录

我们知道app开发目前有三种方式&#xff0c;第一种是webapp&#xff0c;第二种是hybird app&#xff0c;第三种是native app。 而native-app就是安卓原生app&#xff0c;这里记录一下安卓原生开发的基本思路。 首先&#xff0c;安卓原生开发虽然在当今时代不是那么常见了&…

python爬虫小练习——爬取豆瓣电影top250

爬取豆瓣电影top250 需求分析 将爬取的数据导入到表格中&#xff0c;方便人为查看。 实现方法 三大功能 1&#xff0c;下载所有网页内容。 2&#xff0c;处理网页中的内容提取自己想要的数据 3&#xff0c;导入到表格中 分析网站结构需要提取的内容 代码 import requests…

[NAND Flash 6.6] NAND FLASH Multi Plane Program(写)操作_multi plane 为何能提高闪存速度

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< Multi Plane 简介 Multi Plane Program 时序图 Multi Plane 提速机理 Multi Plane Program 状态检查 前言 上一篇我们介绍了 NAND FLASH基本编程(写)…

【昕宝爸爸小模块】线程的几种状态,状态之间怎样流转

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

vue中动态给不同表单赋值

这里的业务是通过关联的 id 发送不同的请求获取表单的数据&#xff0c;然后回显到页面中&#xff0c;整个的页面是由多个表单拼接起来的 点击下一步的时候&#xff0c;获取下一个表单的内容。 // 查询getForm(index) {switch (index) {case 0:this.getFromInfo("inputFor…

图鸟Vue3版本部署

无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 分析原因 这个错误信息表明在 VS Code 终端中尝试运行 pnpm install&#xff0c;但系统无法识别 pnpm 命令。这通常表示 pnpm 这个工具没有被正确安装&#xff0c;或者它的可执行文件所在的路径没有被正确…

故障诊断全家桶,看这一篇就够了,精品力荐!

本期推出故障诊断全家桶&#xff0c;包含传统的分析时频诊断方法&#xff0c;依靠数据分解方法的诊断方法&#xff0c;依靠机器学习的诊断方法。还包含了6种适应度函数随意切换的VMD优化方法&#xff0c;16种数据分解方法&#xff0c;包络谱&#xff0c;包络熵等代码。以及作者…

pgAdmin使用教程(postgresql)

如何使用postgresql 要使用 PostgreSQL 数据库&#xff0c;你可以按照以下步骤进行操作&#xff1a; 安装 PostgreSQL&#xff1a;首先&#xff0c;需要在你的计算机上安装 PostgreSQL 数据库。你可以从 PostgreSQL 官方网站上下载适合你操作系统的安装程序&#xff0c;并按照…

剪映国际版,免费无限制使用

随着抖音的爆火短视频的崛起&#xff0c;相信每一个人都感受到了短视频快节奏下的生活洪流。 现如今每个人都能成为自己生活的记录者&#xff0c;每一个人都有掌握着剪辑的基本技能。而剪映就是很多人都会使用的剪辑软件。 相对于PR、AE等剪辑软件来说&#xff0c;作为一款国…

Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程

direct关键字发布订阅模式 基本用法 发布者 import json from rabbitmq import pika import rabbitmq# 建立连接 credentials rabbitmq.PlainCredentials(zhangdapeng,zhangdapeng520, ) # mq用户名和密码 connection_target rabbitmq.ConnectionParameters(host127.0.0.…

【金猿CIO展】步长制药信息化管理与建设中心总经理束炼:IT部门既要懂技术,也要懂业务...

‍ 束炼 本文由步长制药信息化管理与建设中心总经理束炼撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着数字化转型的浪潮席卷各行各业&#xff0c;中国数字经济已进入快速发展阶…

水浒传之Screen的传奇-Linux/FreeBSD终端下的多窗口复用

缘起 梁山泊大厅 宋江&#xff08;梁山泊头领&#xff09;&#xff1a;各位兄弟&#xff0c;今日我们梁山好汉齐聚一堂&#xff0c;可是有大事要商量。 李逵&#xff08;黑旋风&#xff09;&#xff1a;哥哥&#xff0c;是不是又要有新的任务了&#xff1f;这次我们打谁&am…

架设一台NFS服务器

1、开放/nfs/shared目录&#xff0c;供所有用户查询资料 2、开放/nfs/upload目录&#xff0c;为192.168.xxx.0/24网段主机可以上传目录&#xff0c; 并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210 3、将/home/tom目录仅共享给192.168.xxx.xxx这台主机&#xf…

【翻译转载】What is a Self-Driving Database Management System

What is a Self-Driving Database Management System? cs.cmu.edu/~pavlo/blog/2018/04/what-is-a-self-driving-database-management-system.html#footnote-cidr 概述 一些组织和个人错误地将他们的系统标记为“自动驾驶”。真正的自动驾驶数据库管理系统&#xff08;DBMS…

Mybatis 常用条件语句,大于小于、if、for、模糊搜索、case when、choose

大于小于 方法1&#xff1a; > 大于 &#xff0c; < 小于 <if test"startTime ! null ">and a.create_time > #{startTime} </if> <if test"endTime ! null ">and a.create_time < #{endTime} </if> 方法2(建议写这…

爬虫的基本原理

基本原理 可以把网页与网页之间的链接关系比作节点中的连线&#xff0c;爬虫可以根据网页中的关系获取后续的网页&#xff0c;当整个网站涉及的页面全部被爬虫访问到后&#xff0c;网站的数据就被访问下来了。 1.爬虫概述 简单点讲&#xff0c;爬虫就是获取网页并提取和保存信…