C++ 多线程库 <thread>
C++ 多线程库 C++11 引入了多线程支持,通过 库,开发者可以轻松地在程序中实现并行处理。本文将将介绍 库的基本概念、定义、语法以及如何使用它来创建和管理线程。线程是程序执行的最小单元,是操作系统能够进行运算调度的最小单位。在多线程程序中,多个线程可以并行执行,提高程序的执行效率。C++ 库概述 库是 C++ 标准库的一部分,提供了创建和管理线程的基本功能,它包括以下几个关键组件: std::thread:表示一个线程,可以创建、启动、等待和销毁线程。std::this_thread:提供了一些静态成员函数,用于操作当前线程。std::thread::id:线程的唯一标识符。 创建线程要创建一个线程,你需要实例化 std::thread 类,并传递一个可调用对象(函数、lambda 表达式或对象的成员函数)作为参数。实例#include #include void print_id(int id) { std::cout << “ID: “ << id << “, Thread ID: “ <<...
C++ 多线程
C++ 多线程线程是程序中的轻量级执行单元,允许程序同时执行多个任务。多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段的并发执行。C++ 多线程编程涉及在一个程序中创建和管理多个并发执行的线程。C++ 提供了强大的多线程支持,特别是在 C++11 标准及其之后,通过 标准库使得多线程编程变得更加简单和安全。概念说明线程 (Thread)线程是程序执行中的单一顺序控制流,多个线程可以在同一个进程中独立运行。线程共享进程的地址空间、文件描述符、堆和全局变量等资源,但每个线程有自己的栈、寄存器和程序计数器。并发 (Concurrency) 与并行 (Parallelism)并发:多个任务在时间片段内交替执行,表现出同时进行的效果。并行:多个任务在多个处理器或处理器核上同时执行。C++11...
C++ 多态
C++ 多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。在 C++ 中,多态(Polymorphism)是面向对象编程的重要特性之一。 C++ 多态允许使用基类指针或引用来调用子类的重写方法,从而使得同一接口可以表现不同的行为。多态使得代码更加灵活和通用,程序可以通过基类指针或引用来操作不同类型的对象,而不需要显式区分对象类型。这样可以使代码更具扩展性,在增加新的形状类时不需要修改主程序。以下是多态的几个关键点:虚函数(Virtual Functions): 在基类中声明一个函数为虚函数,使用关键字virtual。派生类可以重写(override)这个虚函数。调用虚函数时,会根据对象的实际类型来决定调用哪个版本的函数。 动态绑定(Dynamic Binding): 也称为晚期绑定(Late Binding),在运行时确定函数调用的具体实现。需要使用指向基类的指针或引用来调用虚函数,编译器在运行时根据对象的实际类型来决定调用哪个函数。 纯虚函数(Pure Virtual...
C++ 基本语法
C++ 基本语法 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。类 - 类可以定义为描述对象行为/状态的模板/蓝图。方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 C++ 程序结构让我们看一段简单的代码,可以输出单词 Hello World。 实例 #include using namespace std; // main() 是程序开始执行的地方int main(){cout << “Hello World”; // 输出 Hello Worldreturn 0;} 接下来我们讲解一下上面这段程序: C++...
C++ 基本的输入输出
C++ 基本的输入输出 C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。 I/O 库头文件下列的头文件在 C++ 编程中很重要。 头文件函数和描述该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。 标准输出流(cout)预定义的对象 cout 是 iostream 类的一个实例。cout 对象”连接”到标准输出设备,通常是显示屏。cout 是与流插入运算符...
C++ 命名空间
C++ 命名空间假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。 定义命名空间命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示: namespace namespace_name {// 代码声明} 为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示: name::code; ...
C++ 变量类型
C++ 变量类型变量其实只不过是程序可操作的存储区的名称。在 C++ 中,有多种变量类型可用于存储不同种类的数据。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。基于前一章讲解的基本类型,有以下几种基本的变量类型,将在下一章中进行讲解: 类型描述bool布尔类型,存储值 true 或 false,占用 1 个字节。char字符类型,用于存储 ASCII 字符,通常占用 1 个字节。int整数类型,通常用于存储普通整数,通常占用 4 个字节。float单精度浮点值,用于存储单精度浮点数。单精度是这样的格式,1 位符号,8 位指数,23 位小数,通常占用4个字节。 double双精度浮点值,用于存储双精度浮点数。双精度是 1 位符号,11 位指数,52 位小数,通常占用 8 个字节。 void表示类型的缺失。wchar_t宽字符类型,用于存储更大范围的字符,通常占用 2 个或 4...
C++ 变量作用域
C++...
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 是表达式。请注意,冒号的使用和位置。? 表达式的值是由...