信息学奥赛之C++ cstdlib – 概览

 

什么是 C++ cstdlib?

C++ cstdlib – 概览_C++

C++ 标准库头文件 (cstdlib in C++) 是 C++ 程序员使用最广泛的库头文件。即:standard librarian。它定义了一系列函数和宏,以实现跨团队、跨平台的高效且具有卓越表现的标准化 C++ 代码。

C++ 是一种广受欢迎的程序语言,它能崛起的最初原因就是可以与 C 语言兼容。C 语言曾经是且现在仍然是一种流行、成熟的程序语言。兼容意味着程序员更容易适应这种语言,更重要的是,C++ 开发人员还可以利用现有的 C 语言代码。

程序员不需要从核心函数开始重建所有内容,可以在按合理步调转向 C++ 时,重复使用成熟的代码块。具体来讲,他们能够利用 C 语言标准库头文件 stdlib.h

目前,C++ cstdlib 是原始 <stdlib.h> 的 C++ 增强版。

C++ cstdlib 与 stdlib.h
C 标准库头文件 <stdlib.h> 为 C 语言程序员提供可靠、高效的函数,以实现动态内存分配、数据类型转换、伪随机数生成、过程控制、搜索和排序、数学以及多字节或宽字符函数。除了这些常见例程外,还包括一些常用常数,以促进组织和平台间的代码标准化。

头文件和命名空间
最初的 C++ 规范 C++98 中规定:为正确使用从 C 语言库中继承的函数功能,采用 <c –name–> 头文件。例如,传统 C 程序中可能包括 “string.h”,而在 C++ 中,相同项目将采用对应的 。此外,随着命名空间的出现,新编写的 C++ 库函数不再在全局、非限定命名空间中定义。相反,它们只在标准命名空间 std 中声明。

如今,C++ 使用 cstdlib 就意味着保证 <stdlib.h> 中所含的全部内容均已在 std 命名空间中声明。因此,开发人员想要使用标准库中的函数时,他们必须先进行声明。可以显式声明,或通过指令声明,例如:

C++ cstdlib – 概览_C++ cstdlib_02

图 1:std::shared_ptr 用作双向链表的一部分

在左列中,由于没有在全局命名空间中声明,非限定使用 shared_ptr<> 报错。在中间列,命名空间显式声明,指向编译器可以查到的位置。在右列中,using namespace std 指令引导编译器至 std,搜索局部或全局范围内不存在的功能。注意:第三种(最右侧)方法不太好。还有一种方法是通过 std::shared_ptr 指令,仅添加 shared_ptr。

其它函数

C++ 库中的 cstdlib 包含由传统 C 语言函数、宏和数据类型构成的超集。以已声明的绝对值 (abs) 函数集为例。在 stdlib.h 中,C 语言定义了计算整数、长整数或长长整数值的绝对值 (abs) 所需的函数。但是没有获取单精度、双精度或更长双精度浮点数绝对值的函数。相反,这些类型需要在另一个常用 C 头文件 math.h内声明。

C++ cstdlib – 概览_C++_03

图 2:C 标准库中的绝对值函数

C++ cstdlib 头文件中 abs() 的相关重写包括上述所有情况。内容

C++ cstdlib 头文件包括若干成员函数、数据类型和常数值。下表列出了按头文件定义的函数。

C++ cstdlib – 概览_C++_04

图 3:转换函数

C++ cstdlib – 概览_C++_05

图 4:随机数相关函数

C++ cstdlib – 概览_C++_06

内存分配 描述或示例 malloc 分配堆内存(指定整个块大小) calloc 分配堆内存(指定大小和计数;初始化内存) realloc 调整已分配的内存大小 free 取消分配内存

图 5:动态内存分配函数

搜索和排序 描述或示例 bsearch 对数组进行二进制搜索 qsort 采用 Quick Sort(快速排序)对数组进行排序

图 6:搜索和排序函数

数学函数 描述或示例 abs 计算整数的绝对值 labs 计算长整数的绝对值 div 除以整数得出商,返回余数结果 ldiv 除以长整数得出商,返回余数结果

图 7:数学函数

C++ cstdlib – 概览_C++_07

图 8:结合多字节和宽字符使用的函数

常数和宏
C++ 库中的 cstdlib 包含多种宏和常数,以便于 C++ 语言开发和代码库标准化。例如,主函数返回的常数值如下:

EXIT_SUCCESS

EXIT_SUCCESS 常数可用作主函数的返回值,将调用框架解释为成功执行。虽然数值 0 也表示程序成功执行,但 EXIT_SUCCESS 针对的是具体实施。

EXIT_FAILURE

EXIT_FAILURE 常数也可用作主函数的返回值。然而,它表示的是执行失败的调用框架,可能存在严重的操作系统级错误。

C++ cstdlib – 概览_C++_08

图 11:主函数返回所用宏示例

例如,C++ cstdlib 定义的常数
NULL 表示指针常数为空,
RAND_MAX 表示 rand 命令生成的最大可能值,
MB_CUR_MAX 表示当前 locale 多字节字符的最大字节数。

结论
C++ 通用标准库头文件,也称为 C++ cstdlib,定义了用于数据类型转换、伪随机数生成、内存分配、搜索、排序、数学和处理宽或多字节字符的核心函数集。它还包括各种常数值形式的有用宏。在许多情况下,C++ 程序员使用来自 cstdlib 的类型、函数或常数,而不必包含此头文件,因为它已经包含在程序员使用的其它头文件中。当原先包含的头文件被删除,某些常数无法识别时,如果不知道某些类型和实用程序来自何处,后续可能会产生麻烦的编译错误。在这种情况下,可能需要使用 cstlib 来节省时间。

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

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

相关文章

总结

文章目录 1. GateWay&#xff1a;100102. Docker3. ES&#xff1a;海量数据的存储、搜索、计算3.1 数据搜索3.2 数据同步 4. 微服务保护&#xff1a;Sentinel4. 分布式事务&#xff1a;&#xff08;二阶段提交&#xff09;5. Redis6. 多级缓存 1. GateWay&#xff1a;10010 2. …

【工具】Mermaid + 大模型画流程图

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 引入使用画TCP三次握手了解历史人物 总结 引入 最近看面试文章关于TCP三次握手和…

【数据结构】链表力扣刷题详解

前言 题目链接 移除链表元素 链表的中间结点 反转链表 分割链表 环形链表的约瑟夫问题 ​ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 移除链表元素 题述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请…

基于python的在线学习与推荐系统

技术&#xff1a;pythonmysqlvue 一、系统背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大…

大模型知识库

一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 1. 下载Langchain-chatchat git clone https://github.com/chatchat-space/Langchain-Chatchat/ 2. 下载大模型和embe…

从零开始学习在VUE3中使用canvas(一):实现一个基础的canvas画布

一、步骤 1.写一个canvas元素 2.获取虚拟dom 3.获取绘制环境 4.绘制想要的效果 5.在挂载后执行 二、代码 <template><div class"canvasPage"><!-- 写一个canvas标签 --><canvas class"main" ref"main"></canv…

StringTable(字符串常量池)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String&#xff1a;字符串&#xff0c;使用一对""引起来表示 String声明为final的&#xff0c;不可被继承 String实现了Serializable接口&#xff1a;表示字符串是支持…

Docker可视化容器管理工具(Portainer)

一、简介 Portainer 是 Docker 的轻量级&#xff0c;跨平台和开源管理 UI。Portainer 提供了 Docker 的详细概述&#xff0c;并允许您通过基于 Web 的简单仪表板管理容器&#xff0c;镜像&#xff0c;网络和卷。支持 GNU/Linux&#xff0c;Windows 和 Mac。 官网地址&#xf…

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】

目录&#xff1a; 每篇前言&#xff1a;1.使用分布式爬取豆瓣电影信息&#xff08;1&#xff09;settings.py文件中的配置&#xff1a;&#xff08;2&#xff09;spider文件的更改&#xff1a;&#xff08;3&#xff09;items.py文件&#xff08;两个项目一致&#xff01;&…

c语言(数据在内存中的存储)

1. 整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分&#xff0c;符号位都是⽤0表⽰“正”&#xff0c;⽤1表⽰“负”&#xff0c;⽽数值位最 ⾼位的⼀位是被当做符号位&#xff0c;剩余的都是数值位。 正整…

手写简易操作系统(十二)--实现时钟中断

前情提要 前面我们开启了中断&#xff0c;但是这些中断都对应着一个通用的中断处理函数&#xff0c;而且几乎都是处理器触发的中断&#xff0c;没有我们的外设中断&#xff0c;虽然我们提前预留了这些接口。 现在我们实现一个时钟中断 一、可编程计数器8253 计算机中的时钟…

基于SpringBoot+MyBatis-Plus的图书管理系统

基于SpringBoot的图书管理系统 图书管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 图书管理系统 开发技术 技术&#xff1a;SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架&#xff1a;基于开源框架Snowy-Layui开发。 工具&#xff1a;IDEA、Navicat等…

2078: [蓝桥杯2023初赛] 01 串的熵

对于一个长度为 n 的 01 串 S x1x2x3...xn. 香农信息熵的定义为&#xff1a; 。 其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。 比如&#xff0c;对于S 100 来说&#xff0c;信息熵 H(S ) - 1/3 log2(1/3) - 2/3 log2(2/3) - 2/3 log2(2/3) 1.3083。 对于一个…

QT--信号和槽机制

信号槽 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号(signal)。这种发出是没有目的的&#xff0c;类似广播。如果有对象对这个…

选择排序算法(Selection Sort)原理及实现

选择排序算法&#xff0c;运行效率不高&#xff0c;但是非常容易理解&#xff0c;算法复杂度为 。 原理&#xff1a; 假设要排序的数组的长度为n&#xff0c;将数组先分为两个部分&#xff0c;一个是有序区域部分&#xff0c;另一个为无序区域部分。初始时有序部分中没有元素…

Python学习:注释和运算符

python 注释 在Python中&#xff0c;注释用于在代码中添加解释、说明或者提醒&#xff0c;但并不会被解释器执行。Python中的注释以#开头&#xff0c;直到行末为止。下面是关于Python注释的详细解释和举例&#xff1a; 单行注释&#xff1a;使用#符号在行的开头添加注释&…

十四届蓝桥杯 冶炼金属(二分 / 公式)

二分代码1&#xff1a; #include<iostream> #include<cstdio> #include<cmath> using namespace std;int get(int a, int b){int l1;r1e91;while(l<r){int mid lr >>1;if(a / mid < b){r mid;}else l mid 1;}return l; } int main() {int n…

为什么技术人员副业赚钱那么难?

公众号&#xff1a;小北技术圈。 34岁老程序员&#xff0c;长期探索副业项目&#xff0c;写过IDEA插件&#xff0c;搞过工具导航&#xff0c;做过出海网站&#xff0c;运营过自媒体。欢迎提前探索35岁程序员的第二赛道。 每周分享干货内容。寻找100个技术人员&#xff0c;聚在…

2000-2021年各省研发强度数据(原始数据+计算结果)(无缺失)

2000-2021年各省研发强度数据&#xff08;原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;RD经费内部支出&#xff08;万元&#xff09;、国内生产总值、研发强度 3、范围&#xff1a;31省 4、来源&#…

人工智能技术应用笔记(九):大道至简!提示词学习入门,看这一篇就够了!

本篇为《人工智能技术应用》专栏的第九篇。希望以学习笔记的形式和大家一起了解和探索人工智能技术的实际应用。 现在关于提示词的武功秘笈已经多如牛毛&#xff0c;但是我相信这个就像练功一样&#xff0c;练到最后总是化繁为简&#xff0c;一招制胜&#xff01; 今天想说的这…