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

news2025/2/25 3:47:11

 

什么是 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 来节省时间。

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

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

相关文章

Java的图书管理系统,确实有两把斧子 ! ! !

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

php 页面中下载文件|图片

一、需求 页面中点击下载图片 二、实现 protected function pageLoad(){$filePath $_GET[file];$host $_SERVER[HTTP_HOST];$file http://.$host.$filePath;$fileName basename($filePath);$content file_get_contents($file);ob_clean();$suffixArr explode(., $file…

力扣大厂热门面试算法题 43-45

43. 字符串相乘&#xff0c;44. 通配符匹配&#xff0c;45. 跳跃游戏 II&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.18 可通过leetcode所有测试用例。 目录 43. 字符串相乘 解题思路 完整代码 Python Java 44. 通配符…

【JAVA快速编写UI】 Java 编写一个编码转换和加解密工具,可以创建一个简单的 GUI 应用程序(例子)

EncodingDecodingTool/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── rockmelodies/ │ │ │ └── encodingdecodingtool/ │ │ │ ├── MainApp.java │ │ │ …

MongoDB启动报错

spring boot 引入MongoDB启动报错 java.lang.IllegalStateException: Failed to introspect Class [io.micrometer.core.instrument.binder.mongodb.DefaultMongoConnectionPoolTagsProvider] from ClassLoader [sun.misc.Launcher$AppClassLoader18b4aac2] at org.springfra…

初识STL(标准模板库)

目录 ​编辑 什么是STL STL的版本 STL的六大组件 如何学习STL STL的优势 STL的缺陷 ⭐什么是STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法…

C语言笔记:函数与程序结构

目录 ACM金牌带你零基础直达C语言精通-课程资料 一.作用域的基本概念 二.函数 1. 函数的定义和使用 2.为什么一定要有函数结构 3.形参与实参 4.函数的声明和定义 5.递归函数 此代码中递归函数执行流程&#xff1a; 练习&#xff1a;求斐波那契数列第n项的值&#xff1a; 欧几里…

洛谷_P1104 生日_python写法

P1104 生日 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 知识点&#xff1a; 还是自定义规则的排序&#xff0c;然后这里还有python中如何在一行中输入多种类型的数据。 n int(input()) data [] num 1 for i in range(n):img list(input().split())s img[0]y int(img…

【unity与android的交互】移动游戏发布更安心!Unity安卓平台打包相关的常见参数全详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

深度学习500问——Chapter03:深度学习基础(3)

文章目录 3.5 Batch Size 3.5.1 为什么需要 Batch size 3.5.2 Batch Size 值的选择 3.5.3 在合理范围内&#xff0c;增大Batch Size有何好处 3.5.4 盲目增大 Batch Size有何坏处 3.5.5 调节Batch Size对训练效果影响到底如何 3.6 归一化 3.6.1 归一化含义 3.6.2 为什么…

大模型知识库

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

打开Railway神奇大门:Railway免费注册部署全面教程

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

React——开发者工具

浏览器插件&#xff1a;谷歌浏览器插件react-devtools 方式1&#xff1a;chrome应用商店添加 方式2&#xff1a;下载安装包放在浏览器上

Redis缓存穿透的几种解决方案

目录 缓存穿透原理&#xff1a; 缓存穿透一般有几种解决方案&#xff1a; 1.缓存空值 2.使用锁 3.布隆过滤器 优缺点 布隆过滤器误判理解 布隆过滤器的简单使用流程 4.组合方案 那么当我们高并发的访问短链接或者人为的去穿透的时候呢&#xff1f; 最近做项目遇到了缓…

SpringBoot自动配置

EnableAutoConfiguration源码解析SpringBoot常用条件注解源码解析SpringBoot之Mybatis自动配置源码解析SpringBoot之AOP自动配置源码解析SpringBoot Jar包启动过程源码解析 SpringBoot2.6.6源码地址&#xff1a;SpringBoot-2.6.6: SpringBoot2.6.6 注解详解 SpringBootConfig…

【技术栈】Spring Cache 简化 Redis 缓存使用

​ SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 ​ 本文封面由 凯楠&#x1f4f8; 友情提供 目录 本栏传送门 1. Spring Cache 介绍 2. Spring Cache 常用注解 注&#xff1a;手机端浏览本文章…

java入门 -输入和输出

输入输出 开发中大量会使用输入和输出&#xff0c;今天来总结一下Java语法阶段常使用的输入和输出。 输出 System.out 控制台输出信息。 不换行显示一行&#xff1a; System.out.print( ); System.out.print("hello "); System.out.print("java!");运行结…

如何强健“伙伴+华为”体系?华为用六大升级给出答案

聚拢企业内部资源&#xff0c;可以成事&#xff1b;而聚拢企业内外资源&#xff0c;则可成势。 华为如何在NA、商业和分销三大赛道聚拢伙伴之力成势&#xff1f;伙伴又如何与华为一起顺势而为&#xff0c;获得发展和收益&#xff1f;这是在一年一度的“华为中国合作伙伴大会”…

MyBatis3源码深度解析(十六)SqlSession的创建与执行(三)Mapper方法的调用过程

文章目录 前言5.9 Mapper方法的调用过程5.10 小结 前言 上一节【MyBatis3源码深度解析(十五)SqlSession的创建与执行(二)Mapper接口和XML配置文件的注册与获取】已经知道&#xff0c;调用SqlSession对象的getMapper(Class)方法&#xff0c;传入指定的Mapper接口对应的Class对象…

BUU [MRCTF2020]套娃

BUU [MRCTF2020]套娃 开题&#xff0c;啥也没有。 查看网页源代码发现后端源代码&#xff1a; <?php //1st $query $_SERVER[QUERY_STRING];if( substr_count($query, _) ! 0 || substr_count($query, %5f) ! 0 ){die(Y0u are So cutE!); }if($_GET[b_u_p_t] ! 23333 &am…