C++ 动态内存
C++ 动态内存了解动态内存在 C++ 中是如何工作的是成为一名合格的 C++ 程序员必不可少的。C++ 程序中的内存分为两个部分: 栈:在函数内部声明的所有变量都将占用栈内存。堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。 很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符。如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。new 和 delete 运算符下面是使用 new 运算符来为任意的数据类型动态分配内存的通用语法: new data-type; 在这里,data-type 可以是包括数组在内的任意内置的数据类型,也可以是包括类或结构在内的用户自定义的任何数据类型。让我们先来看下内置的数据类型。例如,我们可以定义一个指向 double 类型的指针,然后请求内存,该内存在执行时被分配。我们可以按照下面的语句使用 new...
C++ 判断
C++ 判断 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。下面是大多数编程语言中典型的判断结构的一般形式: 判断语句C++ 编程语言提供了以下类型的判断语句。点击链接查看每个语句的细节。 语句描述if 语句一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if…else 语句一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。嵌套 if 语句您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。switch 语句一个 switch 语句允许测试一个变量等于多个值时的情况。嵌套 switch 语句您可以在一个 switch 语句内使用另一个 switch 语句。 ? : 运算符我们已经在前面的章节中讲解了 条件运算符 ? :,可以用来替代 if…else 语句。它的一般形式如下: Exp1 ? Exp2 : Exp3; 其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。? 表达式的值是由...
C++ 函数
C++ 函数 函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。函数还有很多叫法,比如方法、子例程或程序,等等。 定义函数C++ 中的函数定义的一般形式如下: return_type function_name( parameter list ){body of the function} 在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分: 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字...
C++ 内存管理库 <new>
C++ 内存管理库 C++ 是一种功能强大的编程语言,它提供了丰富的标准库来帮助开发者更高效地编写代码。在 C++ 中, 是一个非常重要的头文件,它包含了用于动态内存分配的函数和异常类型。动态内存分配允许程序在运行时请求内存,这在处理不确定大小的数据结构时非常有用。 头文件定义了以下几个关键组件: new 运算符:用于动态分配内存。delete 运算符:用于释放动态分配的内存。nothrow 运算符:用于在内存分配失败时不抛出异常。std::bad_alloc 异常:当内存分配失败时抛出。 语法使用 new 运算符new 运算符用于在堆上分配内存。其基本语法如下:pointer new (type [, initializer]); pointer 是指向分配的内存的指针。type 是要分配的对象的类型。initializer 是一个可选的初始化表达式。 使用 delete 运算符delete 运算符用于释放之前使用 new 分配的内存。其基本语法如下:delete pointer; pointer 是之前使用 new...
C++ 内存管理库 <memory>
C++ 内存管理库 是 C++ 标准库中的一个头文件,它包含了用于动态内存管理的模板和函数。在 C++ 中,内存管理是一个重要的概念。动态内存管理允许程序在运行时分配和释放内存,这在处理不确定大小的数据结构时非常有用。然而,不正确的内存管理可能导致内存泄漏、野指针等问题。 头文件提供了智能指针等工具,帮助开发者更安全地管理动态内存。智能指针智能指针是 头文件中的核心内容。它们是 C++11 引入的特性,用于自动管理动态分配的内存。智能指针的主要类型有: std::unique_ptr:独占所有权的智能指针,同一时间只能有一个 unique_ptr 指向特定内存。std::shared_ptr:共享所有权的智能指针,多个 shared_ptr 可以指向同一内存,内存在最后一个 shared_ptr 被销毁时释放。std::weak_ptr:弱引用智能指针,用于与 shared_ptr 配合使用,避免循环引用导致的内存泄漏。 实例使用 std::unique_ptr实例#include #include class MyClass {public: void...
C++ 修饰符类型
C++ 修饰符类型C++ 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字,它更能满足各种情境的需求。下面列出了数据类型修饰符:signed:表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。unsigned:表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。short:表示变量的范围比 int 更小。short int 可以缩写为 short。long:表示变量的范围比 int 更大。long int 可以缩写为 long。long long:表示变量的范围比 long 更大。C++11 中新增的数据类型修饰符。float:表示单精度浮点数。double:表示双精度浮点数。bool:表示布尔类型,只有 true 和 false 两个值。char:表示字符类型。wchar_t:表示宽字符类型,可以存储 Unicode 字符。修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned...
C++ 信号处理
C++ 信号处理信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 中。 信号描述 SIGABRT程序的异常终止,如调用 abort。 SIGFPE错误的算术运算,比如除以零或导致溢出的操作。 SIGILL检测非法指令。 SIGINT程序终止(interrupt)信号。 SIGSEGV非法访问内存。 SIGTERM发送到程序的终止请求。 signal() 函数C++ 信号处理库提供了 signal 函数,用来捕获突发事件。以下是 signal() 函数的语法: void (*signal (int sig, void (*func)(int)))(int); 这个看起来有点费劲,以下语法格式更容易理解:signal(registered signal, signal...
C++ vector 容器
C++ vector 容器C++ 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。与 C++ 数组相比,vector 具有更多的灵活性和功能,使其成为 C++ 中常用的数据结构之一。vector 是 C++ 标准模板库(STL)的一部分,提供了灵活的接口和高效的操作。基本特性: 动态大小:vector 的大小可以根据需要自动增长和缩小。连续存储:vector 中的元素在内存中是连续存储的,这使得访问元素非常快速。可迭代:vector 可以被迭代,你可以使用循环(如 for 循环)来访问它的元素。元素类型:vector 可以存储任何类型的元素,包括内置类型、对象、指针等。 使用场景: 当你需要一个可以动态增长和缩小的数组时。当你需要频繁地在序列的末尾添加或移除元素时。当你需要一个可以高效随机访问元素的容器时。 要使用 vector,首先需要包含 头文件:#include 创建 Vector创建一个 vector...
C++ Web 编程
C++ Web 编程什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下:公共网关接口(CGI),是一种用于外部网关程序与信息服务器(如 HTTP 服务器)对接的接口标准。目前的版本是 CGI/1.1,CGI/1.2 版本正在推进中。 Web 浏览为了更好地了解 CGI 的概念,让我们点击一个超链接,浏览一个特定的网页或 URL,看看会发生什么。 您的浏览器联系上 HTTP Web 服务器,并请求 URL,即文件名。Web 服务器将解析 URL,并查找文件名。如果找到请求的文件,Web 服务器会把文件发送回浏览器,否则发送一条错误消息,表明您请求了一个错误的文件。Web 浏览器从 Web 服务器获取响应,并根据接收到的响应来显示文件或错误消息。 然而,以这种方式搭建起来的 HTTP 服务器,不管何时请求目录中的某个文件,HTTP...
C++ STL 教程
C++ STL 教程C++ 标准模板库(Standard Template Library,STL)是一套功能强大的 C++ 模板类和函数的集合,它提供了一系列通用的、可复用的算法和数据结构。STL 的设计基于泛型编程,这意味着使用模板可以编写出独立于任何特定数据类型的代码。STL 分为多个组件,包括容器(Containers)、迭代器(Iterators)、算法(Algorithms)、函数对象(Function Objects)和适配器(Adapters)等。使用 STL 的好处: 代码复用:STL 提供了大量的通用数据结构和算法,可以减少重复编写代码的工作。性能优化:STL 中的算法和数据结构都经过了优化,以提供最佳的性能。泛型编程:使用模板,STL 支持泛型编程,使得算法和数据结构可以适用于任何数据类型。易于维护:STL 的设计使得代码更加模块化,易于阅读和维护。 C++ 标准模板库的核心包括以下重要组件组件: 组件描述 容器(Containers)容器是 STL...