C++ 容器类 <map>
C++ 容器类 在 C++ 中, 是标准模板库(STL)的一部分,它提供了一种关联容器,用于存储键值对(key-value pairs)。map 容器中的元素是按照键的顺序自动排序的,这使得它非常适合需要快速查找和有序数据的场景。定义和特性 键值对:map 存储的是键值对,其中每个键都是唯一的。排序:map 中的元素按照键的顺序自动排序,通常是升序。唯一性:每个键在 map 中只能出现一次。双向迭代器:map 提供了双向迭代器,可以向前和向后遍历元素。 基本语法包含头文件:#include 声明 map 容器:std::map<key_type, value_type> myMap; key_type 是键的类型。value_type 是值的类型。 插入元素:myMap[key] = value;访问元素:value = myMap[key];遍历 map:for (std::map<key_type, value_type>::iterator it = myMap.begin(); it !=...
C++ 容器类 <list>
C++ 容器类 C++ 标准库提供了丰富的功能,其中 是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。 是 C++ 标准模板库(STL)中的一个序列容器,它允许在容器的任意位置快速插入和删除元素。与数组或向量()不同, 不需要在创建时指定大小,并且可以在任何位置添加或删除元素,而不需要重新分配内存。语法以下是 容器的一些基本操作: 包含头文件:#include 声明列表:std::list mylist;,其中 T 是存储在列表中的元素类型。插入元素:mylist.push_back(value);删除元素:mylist.pop_back(); 或 mylist.erase(iterator);访问元素:mylist.front(); 和 mylist.back();遍历列表:使用迭代器 for (auto it = mylist.begin(); it != mylist.end(); ++it)特点 双向迭代: 提供了双向迭代器,可以向前和向后遍历元素。动态大小:与数组不同,...
C++ 容器类 <array>
C++ 容器类 C++11 标准引入了 头文件,它提供了一种固定大小的数组容器,与 C 语言中的数组相比,具有更好的类型安全和内存管理特性。std::array 是 C++ 标准库中的一个模板类,它定义在 头文件中。std::array 模板类提供了一个固定大小的数组,其大小在编译时确定,并且不允许动态改变。语法std::array 的基本语法如下:#include std::array<T, N> array_name; T 是数组中元素的类型。N 是数组的大小,必须是一个非负整数。 声明与初始化 需要在编译时确定大小,不能动态改变。使用示例:#include #include int main() { std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 声明一个定长为5的int数组 return 0;}特点 类型安全:std::array 强制类型检查,避免了 C...
C++ 容器 <forward_list>
C++ 容器 C++ 标准库中的 是一种容器,它提供了一种单向链表的数据结构。与双向链表(std::list)不同,std::forward_list 只支持单向遍历。它适用于需要频繁进行前向遍历和插入、删除操作的场景。以下是对 std::forward_list 的详细说明:单向链表: std::forward_list 是单向链表,只能从前往后遍历,不能反向遍历。由于其单向链表的结构,插入和删除操作在已知位置的情况下非常高效(O(1) 复杂度)。 低内存开销: 与 std::list 相比,std::forward_list 只需要一个指向下一个节点的指针,节省了内存。 不支持随机访问: 不支持通过索引访问元素,不能使用 operator[] 或 at 方法,只能通过迭代器进行访问。 语法std::forward_list 是 C++ 标准库中的一个模板类,定义在 头文件中。它使用模板参数 T 来指定存储在列表中的元素类型。以下是 std::forward_list 的基本语法:#include std::forward_list...
C++ 实例
C++ 实例 C++ 实例 - 输出 “Hello, World!” C++ 实例 - 标准输入输出C++ 实例 - 输出换行C++ 实例 - 实现两个数相加C++ 实例 - 创建不同类型的变量C++ 实例 - 求商及余数C++ 实例 - 查看 int, float, double 和 char 变量大小C++ 实例 - 交换两个数C++ 实例 - 判断一个数是奇数还是偶数C++ 实例 - 判断元音/辅音C++ 实例 - 判断三个数中的最大数C++ 实例 - 求一元二次方程的根C++ 实例 - 计算自然数之和C++ 实例 - 判断闰年C++ 实例 - 求一个数的阶乘C++ 实例 - 创建各类三角形图案C++ 实例 - 求两数的最大公约数C++ 实例 - 求两数最小公倍数C++ 实例 - 实现一个简单的计算器猴子吃桃问题
C++ 存储类
C++ 存储类存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: auto:这是默认的存储类说明符,通常可以省略不写。auto 指定的变量具有自动存储期,即它们的生命周期仅限于定义它们的块(block)。auto 变量通常在栈上分配。register:用于建议编译器将变量存储在CPU寄存器中以提高访问速度。在 C++11 及以后的版本中,register 已经是一个废弃的特性,不再具有实际作用。static:用于定义具有静态存储期的变量或函数,它们的生命周期贯穿整个程序的运行期。在函数内部,static变量的值在函数调用之间保持不变。在文件内部或全局作用域,static变量具有内部链接,只能在定义它们的文件中访问。extern:用于声明具有外部链接的变量或函数,它们可以在多个文件之间共享。默认情况下,全局变量和函数具有 extern 存储类。在一个文件中使用extern声明另一个文件中定义的全局变量或函数,可以实现跨文件共享。mutable...
C++ 字符串
C++ 字符串 C++ 提供了以下两种类型的字符串表示形式: C 风格字符串C++ 引入的 string 类类型 C 风格字符串C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。 char site[7] = {‘R’, ‘U’, ‘N’, ‘O’, ‘O’, ‘B’, ‘\0’}; 依据数组初始化规则,您可以把上面的语句写成以下语句: char site[] = “RUNOOB”; 以下是 C/C++ 中定义的字符串的内存表示: 其实,您不需要把 null 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。让我们尝试输出上面的字符串: 实例 #include using namespace std; int main (){char...
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...