C++语言编写数据结构与算法应用的课后答案
数据结构与算法是计算机科学中最重要的一门课程,而C++语言则是一种广泛应用于计算机科学中的高级编程语言。因此,在学习数据结构与算法时,掌握C++语言编写的应用非常重要,而课后答案则是检验个人能力和巩固知识的重要方式。
这篇文章将介绍一些常见的C++语言编写数据结构与算法应用的课后答案。
1. 实现一个二叉搜索树
二叉搜索树是一种二叉树结构,其中左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。以下是一个简单的C++代码实现:
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v)
val = v;
left = nullptr;
right = nullptr;
};
class BinarySearchTree {
public:
TreeNode* root;
BinarySearchTree()
root = nullptr;
void insert(int val) {
if (root == nullptr) {
root = new TreeNode(val);
return;
}
TreeNode* cur = root;
while (cur != nullptr) {
if (val < cur->val) {
if (cur->left == nullptr) {
cur->left = new TreeNode(val);
return;
}
cur = cur->left;
} else if (val > cur->val) {
if (cur->right == nullptr) {
cur->right = new TreeNode(val);
return;
}
cur = cur->right;
} else
return;
}
}
bool search(int val) {
TreeNode* cur = root;
while (cur != nullptr) {
if (val == cur->val) return true;
if (val < cur->val)
cur = cur->left;
else
cur = cur->right;
}
return false;
}
void remove(int val) {
root = removeHelper(root, val);
}
private:
TreeNode* removeHelper(TreeNode* cur, int val) {
if (cur == nullptr) return nullptr;
if (val < cur->val) {
cur->left = removeHelper(cur->left, val);
} else if (val > cur->val) {
cur->right = removeHelper(cur->right, val);
} else {
if (cur->left == nullptr && cur->right == nullptr)
delete cur;
return nullptr;
if (cur->left == nullptr) {
TreeNode* temp = cur->right;
delete cur;
return temp;
}
if (cur->right == nullptr) {
TreeNode* temp = cur->left;
delete cur;
return temp;
}
TreeNode* temp = cur->right;
while (temp->left != nullptr)
temp = temp->left;
cur->val = temp->val;
cur->right = removeHelper(cur->right, temp->val);
}
return cur;
}
};
此代码包括以下方法:插入节点、查找节点和删除节点。需要注意的是,在删除节点时需要考虑三种情况:删除的节点没有子节点、删除的节点只有一个子节点、删除的节点有两个子节点。
2. 实现一个队列
队列是一种按照先进先出(FIFO)原则进行操作的数据结构,以下是一个简单的C++队列实现:
class Queue {
public:
Queue()
head = -1;
tail = -1;
bool empty() {
return (head == -1 && tail == -1);
}
void enqueue(int val) {
if(tail == SIZE-1)
cout << "Queue is full" << endl;
else if (empty()) {
head = tail = 0;
arr[tail] = val;
} else {
tail++;
arr[tail] = val;
}
}
void dequeue() {
if (empty())
cout << "Queue is empty" << endl;
else if (head == tail)
head = tail = -1;
else {
head++;
}
}
int front() {
if (head == -1)
cout << "Queue is empty" << endl;
return -1;
else {
return arr[head];
}
}
private:
const int SIZE = 100;
int arr[100];
int head;
int tail;
};
此代码包括以下方法:判断队列是否为空、入队、出队、返回队首元素。需要注意的是,在入队时需要判断队列是否已满,若已满则需要考虑队列已满的情况。
3. 实现一个栈
栈是一种按照后进先出(LIFO)原则进行操作的数据结构,以下是一个简单的C++栈实现:
class Stack {
public:
Stack()
top = -1;
bool empty() {
return (top == -1);
}
void push(int val) {
if (top == SIZE-1)
cout << "Stack overflow" << endl;
else {
arr[++top] = val;
}
}
void pop() {
if (top == -1)
cout << "Stack underflow" << endl;
else
top--;
}
int peek() {
if (top == -1)
cout << "Stack is empty" << endl;
return -1;
else {
return arr[top];
}
}
private:
const int SIZE = 100;
int arr[100];
int top;
};
此代码包括以下方法:判断栈是否为空、入栈、出栈、返回栈顶元素。需要注意的是,在入栈时需要判断栈是否已满,若已满则需要考虑栈已满的情况。
4. 实现一个链表
链表是一种常用的数据结构,以下是一个简单的C++链表实现:
class ListNode {
public:
int val;
ListNode* next;
ListNode(int val)
this->val = val;
next = nullptr;
};
class LinkedList {
public:
LinkedList()
head = nullptr;
void insert(int val) {
if (head == nullptr) {
head = new ListNode(val);
} else {
ListNode* temp = head;
while (temp->next != nullptr)
temp = temp->next;
temp->next = new ListNode(val);
}
}
bool search(int val) {
ListNode* temp = head;
while (temp != nullptr) {
if (temp->val == val) return true;
temp = temp->next;
}
return false;
}
void remove(int val) {
if (head == nullptr) return;
if (head->val == val) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* cur = head;
while (cur->next != nullptr && cur->next->val != val)
cur = cur->next;
if (cur->next == nullptr) return;
ListNode* temp = cur->next;
cur->next = cur->next->next;
delete temp;
}
private:
ListNode* head;
};
此代码包括以下方法:插入节点、查找节点和删除节点。需要注意的是,在删除节点时需要考虑两种情况:删除的节点是头节点、删除的节点是非头节点。
综上所述,C++语言编写数据结构与算法应用的课后答案是学习数据结构与算法过程中的重要一环,可巩固个人能力,加深对知识的理解和记忆。以上所提供的简单实现,只是一个起点,希望读者能够不断深入学习,进一步掌握数据结构与算法的知识。
-
C++知识梳理:从入门到进阶C++是一种广泛使用的计算机编程语言,具有高效、灵活、易用等特点,被广泛应用于软件开发、游戏制作、机器人控制等领域。如果你想学习C++,本文将为您梳理C++从入门到进阶的知识,并提供一些学习建议。
-
C++试题库:丰富的C++编程技能测试资源C++是一种高级的计算机编程语言,被广泛应用于各种领域,如桌面应用程序、操作系统、游戏、嵌入式系统等。因此,了解和掌握C++编程技能是非常重要的,特别是对于计算机科学专业的学生和从事软件开发工作的人士来说。
-
单片机是否需要使用C++语言?单片机是一种嵌入式系统,被广泛应用于家电、汽车、工业控制等领域。在单片机编程中,C语言一直是主流语言之一。然而,与C语言相比,C++语言在编程方面提供了更多的优势,因此也逐渐成为了单片机编程中的一种备选语言。那么,单片机是否需要使用C++语
-
C++ 数组求和C++是一种高级编程语言,广泛应用于软件开发。在C++中,数组是一个重要的数据类型,它可以存储相同类型的多个变量。
-
C++ 接口C++接口提供了一种在C++程序中使用现有代码库的方法。这些代码库可能是由其他语言编写的,因此使用C++接口可以使这些库能够与C++代码集成。接口的实现是非常具有灵活性的,因为设计者可以根据特定领域需要的函数来编写接口。
-
C++语言源程序的结构特点简介C++是一种面向对象的高级程序设计语言,许多程序员和开发者都使用C++来构建各种类型的软件和应用程序。了解C++语言源程序的结构特点对于程序员和开发者非常重要,因为这有助于他们编写高效、易于维护的代码。
-
如何在C++中调用OpenCV库OpenCV是一款非常流行的计算机视觉库,它可以让开发者轻松地处理图像和视频。如果您想在C++中使用OpenCV,只需要按照以下几个步骤进行配置和调用。
-
C++与OpenCV库的结合使用C++与OpenCV库结合使用是一种强大的图像处理方式。OpenCV是一种开源的计算机视觉库,被广泛用于计算机视觉领域的图像处理和分析。它提供了许多功能,例如图像增强、特征检测和分类、物体识别等等。而C++编程语言则是一种强大的编程语言,可
-
C语言能否使用cpp后缀
-
学完C语言后 应该学习哪些编程语言
-
C语言、C++语言和C#语言的区别
-
C语言与C++的异同C语言与C++的异同
-
C语言与C++语言课程内容C语言与C++语言课程内容
-
C语言与C++语言的区别和联系 - 计算机二级考试必掌握C语言与C++语言的区别和联系 - 计算机二级考试必掌握
-
初学者选择学习C语言还是C++语言初学者选择学习C语言还是C++语言
-
C语言和C++语言哪个更难C语言和C++语言哪个更难
-
C语言与C++语言的关系是什么C语言与C++语言的关系是什么
-
C语言和C++语言的具体区别C语言和C++语言的具体区别
-
C语言和C++语言哪个更容易学习C语言和C++语言哪个更容易学习
-
C语言与C++语言的差别及应用场景C语言与C++语言的差别及应用场景
-
学C语言还是学C++好学C语言还是学C++好
-
C语言还是C++好 —— 一位程序员的看法C语言还是C++好 —— 一位程序员的看法
-
C++给C语言注入新活力:改进和升级C++给C语言注入新活力:改进和升级
-
C语言与C++语言的关系及其差异分析C语言与C++语言的关系及其差异分析
-
C语言和C++语言的特点对比C语言和C++语言的特点对比
-
得程序更加高效得程序更加高效
-
C语言和C++哪个更强大C语言和C++哪个更强大
-
c++语言对c语言做了很多改进c++语言对c语言做了很多改进
-
学习C++是否必须要先学习C语言学习C++是否必须要先学习C语言
-
C语言与C++有何不同C语言与C++有何不同
-
C语言是否可以在C++上运行C语言是否可以在C++上运行
-
C语言和C++语言的区别C语言和C++语言的区别
-
C和C++语言都是面向对象的C和C++语言都是面向对象的
-
ROS与C++语言的兼容性ROS与C++语言的兼容性
-
C++语言的向后兼容性不足C++语言的向后兼容性不足
-
C语言和C++语言的区别C语言和C++语言的区别
-
如何顺利过渡从C语言学习到C++语言如何顺利过渡从C语言学习到C++语言
-
C语言转C++容易吗C语言转C++容易吗
-
C语言与C++语言的区别C语言与C++语言的区别
-
C语言 VS C++语言:哪个更好C语言 VS C++语言:哪个更好
-
C语言和C++语言的本质区别C语言和C++语言的本质区别
-
C++语言的特性及用途C++语言的特性及用途
-
「C语言是面向对象的编程语言吗「C语言是面向对象的编程语言吗
-
Java:一门使用什么语言开发的编程语言?Java:一门使用什么语言开发的编程语言?
-
推导CC语言:从C语言到C++的探究推导CC语言:从C语言到C++的探究
-
C语言与C++语言之间的互换C语言与C++语言之间的互换
-
可以用c++参加c语言考试吗可以用c++参加c语言考试吗
-
先学C语言还是先学C++语言先学C语言还是先学C++语言
-
C和C++语言的区别C和C++语言的区别
-
从C++到C语言的转换及其应用从C++到C语言的转换及其应用
-
使用FFMPEG剪切MP3文件在音频处理领域,FFMPEG是一个功能强大且广泛使用的开源工具。它可以处理各种音频和视频格式,并提供了许多功能,如剪切、合并、调整音量等。
-
使用Go语言和FFmpeg实现视频中添加文字和图片在现代社交媒体的时代,视频已经成为了人们分享生活、记录瞬间的重要方式之一。而对于制作视频来说,添加文字和图片元素可以起到丰富内容、增强表达能力的作用。那么,如何使用Go语言和FFmpeg来实现视频中添加文字和图片呢?
-
使用FFmpeg启动RTMPFFmpeg是一个跨平台的多媒体处理工具,它可以对音频和视频进行编码、解码、转码和流媒体处理等操作。其中,RTMP(Real-Time
-
OpenCV安装完毕后,如何使用?OpenCV是一种开源的计算机视觉和图像处理库,它提供了大量的函数和工具,可以帮助开发人员进行图像处理、计算机视觉和机器学习任务。在安装OpenCV之后,我们可以开始学习如何使用它。
-
OpenCV 图像匹配算法:从理论到实践OpenCV(开源计算机视觉库)是一个广泛使用的图像处理库,提供了许多功能和算法,其中包括图像匹配算法。图像匹配是指通过计算机自动寻找和匹配两幅或多幅图像中的相似区域或特征点。这种算法在各种领域都有广泛的应用,例如目标跟踪、图像识别和图像配
-
使用OpenCV和YOLO算法进行物体检测物体检测是计算机视觉领域的一个重要任务,它可以识别并定位图像或视频中的不同物体。随着深度学习的发展,YOLO(You
-
使用 OpenCV 自动将人物图像转换为卡通风格在现代社交媒体平台上,人们常常喜欢将自己的照片转换为卡通风格的图像,以增加趣味性和独特性。这种趋势的兴起也催生了许多应用程序和在线工具,用于将普通的照片转换为卡通风格。而使用
-
使用OpenCV提高图像分辨率在现代社会中,图像处理一直是一个重要的研究方向。人们希望通过一些算法和技术来提高图像的质量,使其变得更加清晰和细腻。而OpenCV作为一个功能强大的开源计算机视觉库,提供了丰富的工具和函数来实现图像分析和处理。其中,提高图像分辨率是一个常见
-
Python OpenCV模板匹配与小波变换Python是一种流行的编程语言,用于图像处理和计算机视觉领域。而OpenCV是一个强大的开源计算机视觉库,可以在Python中使用。在图像处理过程中,模板匹配和小波变换是两个重要的技术。
-
PyCharm配置OpenCV和PyQt5教程PyCharm是一款功能强大的
-
使用FFmpeg命令行进行视频范围设置FFmpeg是一个非常强大的多媒体处理工具,它可以在命令行下执行各种音视频处理任务。在视频处理中,我们常常需要对视频的范围进行设置,以满足不同需求。接下来,我们将介绍如何使用FFmpeg命令行进行视频范围设置。
-
使用OpenCV求图像梯度图像梯度是计算图像上每个像素点处的变化率的一种方法。它在许多计算机视觉任务中都扮演着重要的角色,比如边缘检测、图像增强和目标跟踪等。OpenCV是一个广泛使用的计算机视觉库,它提供了许多用于处理和分析图像的函数和工具。在本文中,我们将介绍如
-
使用FFmpeg录制系统音频FFmpeg是一款非常强大的音视频处理工具,它不仅可以用来转码、剪辑、合并音视频文件,还可以录制系统的音频。本文将介绍如何使用FFmpeg录制系统音频。
-
OpenCV 图像翻转函数:实现图像镜像、旋转和翻转操作OpenCV是一个开源的计算机视觉库,广泛应用于图像处理和计算机视觉领域。在这个库中,有一个非常有用的函数,可以实现图像的翻转,包括镜像、旋转和翻转操作。
-
使用简体中文,以下是一个标题:「FFmpeg人脸识别:快速有效地识别图像和视频中的人脸在现代社会中,人脸识别技术正逐渐变得越来越普遍。随着技术的不断进步,越来越多的应用领域开始使用这一技术。其中,FFmpeg人脸识别是一种快速有效地识别图像和视频中的人脸的方法。
-
C语言动态调用函数实现方法和示例说明C语言是一种高级编程语言,其特点之一就是灵活和可扩展性强。在C语言中,动态调用函数是一种非常重要的技术,可以实现各种复杂的功能。本文将介绍C语言中动态调用函数的实现方法和示例说明。
-
OpenCV数组转Mat: 实现图像数据的转换与处理OpenCV是一个开源的计算机视觉库,可以用来处理图像和视频。它是由Intel开发并在BSD许可下发布的。其中一个重要的功能是从数组转换为Mat对象,以实现图像数据的转换和处理。
-
OpenCV GPUmat:加速图像处理的神器OpenCV是一个开源的计算机视觉库,被广泛应用于图像处理和机器视觉领域。然而,随着图像和视频数据的不断增加,对于实时处理和高效算法的需求也变得越来越迫切。为了应对这一挑战,开发人员引入了GPUmat,这是OpenCV的一个重要补充,旨在利
-
Java实现的stressen矩阵乘法算法矩阵乘法是计算机科学中的一个经典问题,广泛应用于各个领域。在矩阵乘法中,通常需要计算两个矩阵的乘积,结果是一个新的矩阵。然而,由于矩阵乘法的运算复杂度较高,特别是在大规模的矩阵计算中,需要充分利用计算机的性能,提高计算速度。
-
OpenCV的CV_8U数据类型解析OpenCV是一个功能强大的开源计算机视觉库,提供了许多用于图像和视频处理的功能。在OpenCV中,图像的数据类型是非常重要的,而CV_8U是其中之一。
-
使用C++编写C语言的方法C++是一种广泛使用的编程语言,它是C语言的一个超集,也就是说C++可以兼容C语言,并且拓展了更多的功能和特性。在某些情况下,我们可能需要使用C++编写C语言的代码,这种情况可能出现在需要使用C++特性的同时又需要与已有的C代码进行兼容的情
-
FFmpeg实现RTSP视频录像倍速播放技术FFmpeg是一个开源的音视频处理库,广泛应用于众多领域,其中之一就是实现RTSP(实时流传输协议)视频录像倍速播放技术。RTSP是一种基于TCP/IP协议的实时流传输协议,常用于实现网络摄像头和监控系统的视频传输。
-
OpenCV如何调整图像尺寸OpenCV是一个广泛用于图像处理和计算机视觉应用的开源库。它提供了各种功能,包括图像尺寸的调整。调整图像尺寸可以在许多应用中起到重要作用,如图像缩放、目标检测和图像识别。
-
FFmpeg 5.0 Delphi:提升音视频处理功能的强大工具在音视频处理领域,FFmpeg是一个非常受欢迎的开源框架,它提供了一套强大的功能,可以对音频和视频进行编解码、转码、剪辑等操作。而在Delphi编程语言中,开发人员现在可以使用FFmpeg
-
使用OpenCV C++库读取一张图片OpenCV是一个开源的计算机视觉库,提供了各种功能和算法,可以用于图像和视频处理。这个库支持多种编程语言,包括C++、Python、Java等。
-
使用FFmpeg实现FLV格式的RTMP流媒体传输FFmpeg是一种开源的多媒体框架,可用于处理音视频流。它支持多种音视频编解码器,并且可以实现各种格式的转换和编辑。在本文中,我们将讨论如何使用FFmpeg实现FLV格式的RTMP流媒体传输。
-
如何选择适合的数学库:除了大型的opencv,还有哪些可供选择的数学库?在当今科技发展的时代,数学库在各个领域发挥着至关重要的作用。不仅仅是大型的opencv在数学库中拥有一席之地,还有许多其他适合各种需求的数学库可供选择。
-
用什么方式可以运行OpenCV?OpenCV是一个开源的计算机视觉库,可用于图像和视频处理,以及机器学习任务。它提供了丰富的图像处理工具和算法,使开发人员能够轻松地处理和分析图像数据。那么,我们可以通过哪些方式来运行OpenCV呢?
-
使用OpenCV库进行本地摄像头调用OpenCV是一个强大而广泛使用的计算机视觉库,它提供了许多功能来处理图像和视频。其中一个重要的功能是通过本地摄像头进行实时图像捕获和处理。本文将介绍如何使用OpenCV库来调用本地摄像头并对图像进行处理。
-
使用OpenCV可以在哪些领域应用?OpenCV(开源计算机视觉库)是一个广泛使用的计算机视觉库,可以在许多领域进行应用。它提供了各种各样的图像处理和计算机视觉算法,使开发者能够快速处理图像和视频数据。
-
OpenCV图像平移与旋转技巧OpenCV是一个广泛使用的开源计算机视觉库,能够提供丰富的图像处理与分析功能。其中,图像平移和旋转是其中的两个重要技巧,可以帮助我们在处理图像时更灵活、更准确地操作。
-
使用OpenCV进行图像像素操作OpenCV(开源计算机视觉库)是一种广泛使用的图像处理库,它提供了各种强大的功能,用于处理图像和视频数据。其中一个重要的功能是对图像的像素进行操作,也就是修改或获取图像中的每个像素的值。
-
使用OpenCV实现物体追踪和定位OpenCV是一个广泛使用的开源计算机视觉库,提供了各种功能,包括图像处理、目标检测和跟踪等。在本文中,我们将介绍如何使用OpenCV实现物体追踪和定位。
-
OpenCV 和 Qt 的配置指南OpenCV(Open
-
用OpenCV和Python实现人脸关键点检测人脸关键点检测是计算机视觉领域中的一个重要任务,它被广泛应用于人脸识别、表情分析、姿态估计等应用中。在本文中,将介绍如何使用OpenCV和Python实现人脸关键点检测的方法。
-
使用JavaCV和FFmpeg循环读取图片并推流JavaCV是一个在Java平台上使用OpenCV和其他计算机视觉库的开源项目。它提供了一套Java接口,可以用于实时图像处理和计算机视觉任务。而FFmpeg则是一个流行的开源多媒体框架,可以用于处理音频和视频。
-
开源的类似ffmpeg的多媒体处理库近年来,随着多媒体技术的发展,越来越多的应用程序需要对音频和视频进行处理。而在这个领域,开源的类似ffmpeg的多媒体处理库扮演着重要的角色。
-
使用OpenCV进行图像颜色分割:简单而强大的图像处理技术OpenCV是一种广泛使用的开源计算机视觉库,提供了许多功能强大的图像处理技术。其中之一是图像颜色分割。图像颜色分割指的是将一幅图像中的不同颜色区域分割为单独的部分。这种技术在许多领域中都有广泛的应用,比如目标检测、医学图像处理等。
-
使用 FFmpeg 进行麦克风采集FFmpeg
-
【简体中文】:《C/C++常用算法手册》百度云分享在计算机编程领域中,C和C++是两种被广泛应用的编程语言。作为高级程序设计语言,C和C++的应用领域涉及到各个行业和领域,因此,掌握C和C++的常用算法,对于程序员来说是至关重要的。
-
Opencv人脸相似度识别技术分析与应用Opencv是一种广泛应用于计算机视觉领域的开源库,它为开发人员提供了一些强大的工具和算法,可以处理图像和视频数据。其中一个非常有趣和实用的应用就是人脸相似度识别技术。
-
使用OpenCV调用相机实现拍照在计算机视觉领域,OpenCV是一个非常流行的开源库,用于处理图像和视频。它提供了许多功能,包括读取和处理图像、图像的特征提取和匹配、物体检测和跟踪等。其中,使用OpenCV调用相机实现拍照是一个非常常见的需求。
-
OpenCV中imread函数返回空值问题解析OpenCV是一个强大的计算机视觉库,提供了许多图像处理和计算机视觉相关的功能。在使用OpenCV时,经常会用到imread函数来读取图像文件。然而,有时候我们发现imread函数返回的是一个空值,这个问题常常让人感到困惑。本文将对这个问题
-
C语言Android应用程序开发Android操作系统在智能手机和平板电脑市场上占据着重要地位,开发者们纷纷投身于Android应用程序开发。而在这个领域中,C语言也扮演着重要的角色。本文将介绍C语言在Android应用程序开发中的应用以及相关的开发工具和资源。
-
OpenCV形状匹配:实现图像形状的精确匹配和识别OpenCV是一个非常流行的计算机视觉库,可以用于各种图像处理任务。其中之一是形状匹配,也是一项非常重要的任务。形状匹配可以用于检测和识别图像中的特定形状,从而实现对象的识别和跟踪。
-
使用OpenCV进行图片识别的游戏挂机技巧在现代的游戏中,玩家往往需要花费大量的时间和精力来完成各种任务和挑战。然而,对于一些重复性任务,玩家可能会感到厌倦并想要寻找一种方法来自动化这些过程。幸运的是,利用计算机视觉技术中的OpenCV库,玩家可以使用图片识别来帮助他们在游戏中挂机
-
Android FFmpeg库介绍及使用指南Android
-
OpenCV函数库详解OpenCV是一个非常有名的开源计算机视觉库,广泛应用于图像和视频处理领域。它包含多个模块和函数,提供了丰富的功能和算法,可以帮助开发者实现图像处理、特征提取、目标识别等任务。本文将详细介绍一些常用的OpenCV函数。
-
手机版的FFmpeg近年来,智能手机的快速发展使得人们在日常生活中越来越依赖于这些小巧的设备。与此同时,随着手机上出现越来越好的摄像头和音频设备,人们希望能够在手机上进行更多的多媒体处理和编辑工作。FFmpeg是一个强大的音视频处理工具,而现在,它也有了手机版
-
【教程】使用OpenCV进行立体匹配:从基础概念到实际应用OpenCV是一款广泛应用于计算机视觉的开源库,其中包含了许多用于图像处理和计算机视觉任务的功能。在本文中,我们将学习如何使用OpenCV进行立体匹配,从基础概念到实际应用。
评论区