当前位置: 首页 > 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

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

相关文章:

  • Java项目:117SpringBoot动漫论坛网站
  • 前端随机验证码安全验证sdk
  • 【EMC专题】浪涌的成因与ICE 61000-4-5标准
  • 训练AI模型:寻找最优参数a和b
  • stm32学习笔记:USART串口通信
  • Day02
  • 远程登陆利器 ssh
  • C# 静态代码织入AOP组件之肉夹馍
  • 剑指offer面试题5 从尾到头打印链表
  • 第二百六十六回
  • Nano文本编辑器:轻松入门,简单实用(适用于Linux)
  • Win系统搭建Elasticsearch实现公网远程访问本地服务
  • 安卓多用户管理之Userinfo
  • 微服务架构的服务注册和发现究竟采用Nacos还是Eureka ?
  • 68、python - 第一版手写代码性能评估
  • es6--symbol
  • JavaScript类型识别
  • JAVA并发编程--1.基础概念
  • jquery ajax学习笔记
  • Linux后台研发超实用命令总结
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PHP面试之三:MySQL数据库
  • SQLServer之创建数据库快照
  • Vue实战(四)登录/注册页的实现
  • 浅谈Golang中select的用法
  • 我有几个粽子,和一个故事
  • k8s使用glusterfs实现动态持久化存储
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​用户画像从0到100的构建思路
  • (1) caustics\
  • (2)(2.10) LTM telemetry
  • (23)Linux的软硬连接
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)图像的%2线性拉伸
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)Windows2003安全设置/维护
  • **CI中自动类加载的用法总结
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET中统一的存储过程调用方法(收藏)
  • /bin/bash^M: bad interpreter: No such file or directory
  • @31省区市高考时间表来了,祝考试成功
  • @Documented注解的作用
  • @Resource和@Autowired的区别
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [383] 赎金信 js
  • [C#基础]说说lock到底锁谁?
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [HJ73 计算日期到天数转换]
  • [HNOI2006]鬼谷子的钱袋
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式