蓝桥杯备赛:C++基础,顺序表和vector(STL)

目录

一.C++基础

1.第一个C++程序:

2.头文件:

3.cin和cout初识:

4.命名空间:

二.顺序表和vector(STL)

1.顺序表的基本操作:

2.封装静态顺序表:

3.动态顺序表--vector:

(1)创建vector:

(2)size和empty:

(3)begin和end:

(4)front和back:

(5)resize和clear:


一.C++基础

1.第一个C++程序:

可能有些同学跟我一样,一直以来学习的都是基础的C语言,而在接触蓝桥杯这类相比较正规的竞赛时会发现它所使用的程序规范与基础的C语言大相径庭,但没关系的,虽然他使用的规范隶属于C++范畴,但只要掌握以下几条差异,C++于我们也不会再陌生,光说不算,先直接来看一下我们的第一个C++程序:

​
#include <iostream> //头⽂件 
using namespace std; //使⽤std的名字空间 
int main() //main函数 
{cout << "hello world!" << endl; //输出:在屏幕打印"hello world!" return 0;
}

2.头文件:

ok,接下来我就来详细说说这其中的一些区别,当然最先注意到的就是包含的头文件的差异了:

        前⾯的代码中,写的 #include ,就是在包含头⽂件,头⽂件的名字叫: iostream

使用 #include <> 的形式进行包含

        iostream 文件中的 io 指的是输⼊(进入程序的信息,简单理解就是可以给程序输⼊数据)和输出(从程序中输出的信息,简单理解就是程序 会打印数据在屏幕上)。

        在 C++ 程序中要完成输⼊和输出的操作会涉及到 iostream 文件中的多个定义,所以就要包含这个 头⽂件的

        比如:代码中的 cout 是输出流对象,就是⽤来完成数据输出的,就需要包含头文件。

简单些理解:iostream这个头文件就当于是一个我们之前学习C语言里无数头文件的一个集合,为的就是使我们对头文件的包含的使用更加方便和简洁

注:

        1. 在C语⾔中头文件的扩展名是 .h ,但是C++中的⽤法发生了⼀些变化,对⽼式C的头⽂件保留了扩展名 .h ,但是C++自己的⽂件没有扩展名了,如原来的C语⾔头⽂件: 

        2. 有些C的头⽂件被转换成C++头⽂件,这些⽂件名被重命名,去掉了.h扩展名,并在⽂件名的前⾯加 上了前缀c(表示来⾃C语⾔);例如:C语⾔中有关数学的头⽂件名字是 math.h ,在C++中就 是 cmath ,当然还得注意,有时头⽂件的C语⾔版本和C++版本相同,⽽有时候,新版本做了⼀些 修改:

3.cin和cout初识:

cout << "hello world!" << endl;这句代码在上⾯的程序中是最重要的代码,其他所有的 代码都是为了编写这句代码。

cout标准输出流对象(针对控制台,也就是屏幕),其实还有标准输⼊流对象cin(针对的是键 盘)

即cout 告诉程序把后⾯双引号中的内容打印到标准输出设备(屏幕)上,双引号中的内容可以替换

#include<iostream>
using namespace std;
int main()
{int num;cin >> num; //获取标准输⼊ cout << num << endl; //对获取到的结果标准输出 return 0;
}

总结:

1.cin 和 cout 是全局的流对象, cin 负责输⼊数据(scanf)cout 负责输出数据(printf)

2. endl 是C++中⼀个特殊的操作符,效果是换行和刷新缓冲区,使⽤时必须包含在 iostream 头文件里

3. <<是流插⼊运算符,和 cout 配合使用, >> 是流提取运算符,和 cin 配合使⽤,两者容易混 淆,⼤家⼀定要仔细区分,不可混用

使⽤C++输⼊输出更⽅便,不需要像 printf / scanf 输⼊输出时那样,需要⼿动控制格式。 C++的输⼊输出可以⾃动识别变量类型。(后面会提到到,慢慢体会就好):

#include <iostream>
using namespace std;
int main() 
{float score = 0;cin >> score;//直接读取的就是浮点数 cout << score;//直接输出的就是浮点数 return 0;
}

4.命名空间:

using namespace std; 这句代码的意思是:使⽤名字空间 std (名字空间也叫命名空间), 为了理解什么是名字空间,名字空间要解决什么问题,先看⼀下下面的例子:

在C++中,变量、函数和类都是⼤量存在的,这些变量、函数和类的名称如果都存在于全局作⽤域中, 可能会导致很多冲突。使⽤ 名字空间 的⽬的是对标识符的名称进⾏隔离,以避免命名冲突或名字污染, namespace 关键字的出现就是针对这种问题的。 std 是C++标准库的名字空间名,C++将标准库的定义实现都放到这个命名空间中,当我们需要使用标准库中的内容时,就需要加上: using namespace std ;当有了这句代码的时候,表示命名空间 std 中信息都是可见和可⽤的,比如: cin 、 cout 、 endl 等:

当然使用using namespace std;是⼀种简单粗暴的做法,直接这样使⽤,就意味着后续在std这个名字空间中的各种定义都可以直接使⽤,但是我们往往只是使⽤部分。所以名字空间其实也可以这样使⽤

#incldue <iostream>
int main()
{   std::cout << "hello world" << std::endl;return 0;
}

代码中的 std::cout的意思就是使⽤std名字空间中的cout

欧克,到这里为止再看一下最初的C++程序,是不是就好理解多了:

#include <iostream> //头⽂件 
using namespace std; //使⽤std的名字空间 
int main() //main函数 
{cout << "hello world!" << endl; //输出:在屏幕打印"hello world!" return 0;
}

二.顺序表和vector(STL)

说完了上面C++的基础格式,接下来就是正式的蓝桥杯知识点的干货分享了

1.顺序表的基本操作:

其实顺序表的基本操作无非就是我们老生常谈的那几种尾插尾删,头插头删,指定位置插入和删除和对某一个元素的查找,这些在C语言基础里我都有提及,详细可以看我附在下面的这篇文章:

https://blog.csdn.net/2403_87691282/article/details/144203616?spm=1001.2014.3001.5501

方便起见,我还是把简化的一些操作附在下面,以便阅览:

// 打印顺序表 
void print()
{for(int i = 1; i <= n; i++){cout << a[i] << " ";}cout << endl << endl;
}// 尾插 
void push_back(int a[], int& n, int x)
{a[++n] = x;
}// 头插 
void push_front(int x)
{// 1. 先把 [1, n] 的元素统⼀向后移动⼀位 for(int i = n; i >= 1; i--){a[i + 1] = a[i];}// 2. 把 x 放在表头 a[1] = x;n++; // 元素个数 +1 
}// 在任意位置插⼊ 
void insert(int p, int x)
{//把 [p, n] 的元素统⼀向后移动⼀位 for(int i = n; i >= p; i--){a[i + 1] = a[i];}a[p] = x;n++;
}// 尾删 
void pop_back()
{n--;
}// 头删 
void pop_front()
{// 1. 先把 [2, n] 区间内的所有元素,统⼀左移⼀位 for(int i = 2; i <= n; i++){a[i - 1] = a[i];}n--;
}// 任意位置删除 
void erase(int p)
{// 把 [p + 1, n] 的元素,统⼀左移⼀位 for(int i = p + 1; i <= n; i++){a[i - 1] = a[i];}n--;
}// 按值查找 
int find(int x)
{for(int i = 1; i <= n; i++){if(a[i] == x) return i;}return 0;
}// 按位查找 
int at(int p)
{return a[p];
}// 按位修改 
int change(int p, int x)
{a[p] = x;
}// 清空操作 
void clear()
{n = 0;
}

2.封装静态顺序表:

所谓封装静态顺序表就是当我们在面对需要创建好几个顺序表并且对它们进行操作及以下情况时而产生的简化操作的行为:

可见,当涉及到多个顺序表时,虽然上述的代码可以套用,但还是略显麻烦,这个时候就不由得发问了:博主博主,这些函数固然好用,但有没有什么其他更简便的套用方式,有的兄弟,有的,这么方便的用法当然是有的:

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
// 将顺序表的创建以及增删查改封装在⼀个类中 
class SqList
{int a[N];int n;
public:// 构造函数,初始化 SqList(){n = 0;}// 尾插 void push_back(int x){a[++n] = x;}// 尾删 void pop_back(){n--;}// 打印 void print(){for (int i = 1; i <= n; i++){cout << a[i] << " ";}cout << endl;}
};
int main()
{SqList s1, s2; // 创建了两个顺序表 for (int i = 1; i <= 5; i++){// 直接调⽤ s1 和 s2 ⾥⾯的 push_back s1.push_back(i);s2.push_back(i * 2);}s1.print();s2.print();for (int i = 1; i <= 2; i++){s1.pop_back();s2.pop_back();}s1.print();s2.print();return 0;
}

在上述代码里,博主使用了class(类的运用)对几个函数进行封装,这样在以后对顺序表的操作时,就可以直接使用”.“进行各种简洁的运用了

当然这里还需再提一下class和public的使用了(蓝桥杯作为一个应试考试,好些代码的具体原理就不再在这里进行深究了,未来我会具体介绍,但也仅供了解):

在C++中,‌class是定义类的关键字,而public是访问修饰符之一‌

以下是详细解释:

‌class(类)‌

类是C++中的基本构造块,用于定义对象的属性和行为‌
类使用class关键字声明,后面跟着类名和类体,类体中包含成员变量和成员函数‌2。
‌public(公有)‌

public是类的访问修饰符之一,表示该成员(变量或函数)是公有的,可以被类的外部访问‌
公有成员在类的内部和外部都可以被访问,相当于C语言中的struct结构体成员‌

ps

在C++中,类和结构体(struct)都是用于定义复合数据类型的构造,它们都可以包含成员变量和成员函数。然而,尽管它们在许多方面相似,但也有一个关键的区别:

即默认访问权限‌

‌类(class)‌:在类中,默认的访问权限是私有的(private),这意味着除非明确指定为public或protected,否则类的成员是不可从类外部访问的。
结构体(struct)‌:在结构体中,默认的访问权限是公有的(public),这意味着结构体的所有成员默认都是可以从外部访问的,除非它们被明确指定为private或protected

当然我这边讲封装肯定不仅仅是为了简洁,更多的还是为我接下来介绍SYL做一个铺垫

当然STL具体是啥我还是先说明一下:

提供高效的数据结构‌:
STL包含了多种高效的数据结构,如vector(动态数组)、list(双向链表)、map(映射/字典)、set(集合)等。这些数据结构都是经过精心设计和优化的,可以在不同的场景下提供高效的数据存储和访问。

‌实现常用的算法‌:
STL提供了一系列常用的算法,如排序、搜索、合并、拷贝等。这些算法都是以模板函数的形式提供的,可以适用于不同的数据类型和容器。通过使用STL的算法,可以避免重复编写常见的算法代码,提高开发效率。

3.动态顺序表--vector:

       在之前C语言的学习过程中,一提到动态顺序表就不由得会回忆起被malloc和free,new和deletae支配的恐惧,而这里需要强调一点的就是竞赛代码不同于我们之前学的工程代码,什么是工程代码,就是以malloc为首的一系列相比来说在竞赛中使用效率不高而且容易超时的一系列函数,因此当我们在竞赛过程中使用动态顺序表的时候就有了一种更好的方式:

       C++ 的STL 提供了⼀个已经封装好的容器vector , 有的地⽅也叫作变⻓数组, vector 的底层就是⼀个会⾃动扩容的顺序表,其中创建以及增删查 改等等的逻辑已经实现好了,并且也完成了封装, 接下来就重点了解以下vector 的使用:

(1)创建vector:
#include <vector> // 头⽂件 
using namespace std;
const int N = 20;
struct node
{int a, b, c;
};
// 创建 
void init()
{vector<int> a1; // 创建⼀个空的可变⻓数组 vector<int> a2(N); // 指定好了⼀个空间,⼤⼩为 N vector<int> a3(N, 10); // 创建⼀个⼤⼩为 N 的 vector,并且⾥⾯的所有元素都是 10 vector<int> a4 = { 1, 2, 3, 4, 5 }; // 使⽤列表初始化,创建⼀个 vector // <> ⾥⾯可以放任意的类型,这就是模板的作⽤,也是模板强⼤的地⽅ // 这样,vector ⾥⾯就可以放我们接触过的任意数据类型,甚⾄是 STL vector<string> a5; // 放字符串 vector<node> a6; // 放⼀个结构体 vector<vector<int>> a7(N); vector<int> a8[N]; 
}

大家仔细看的话会发现我最后俩没写注释,为啥,因为我觉得这俩在理解上有些不太容易,所以我就单独把它们拎出来做解释:

就正如上图(字可能有些丑,凑合看看吧(捂脸))所示,可以理解为前者的主体时vector<int>类型的变长数组,而后者则是已顺序表为主体来存放变长数组

其实在C++中,vector<vector<int>> a7(N); 和 vector<int> a8[N]; 是两种不同的方式来创建数组或数组的数组(即二维数组),但它们依旧有着本质的区别

‌vector<vector<int>> a7(N);‌

这是一个使用vector容器创建的二维动态数组。vector是C++标准模板库(STL)中的一个序列容器,它可以动态地管理内存,根据需要自动调整大小。这里的a7是一个包含N个vector<int>的vector,即一个二维数组,其中每一行都是一个可以独立调整大小的vector<int>

‌优点‌:
动态调整大小:每一行都可以根据需要独立增加或减少元素。
内存管理自动化:vector会自动管理内存,减少内存泄漏的风险。
‌缺点‌:
可能的性能开销:由于动态调整大小和自动内存管理,可能会引入一些性能开销。
不是连续内存:vector的底层实现通常是一个指向动态分配内存的指针数组,因此二维vector的元素在内存中不是连续存储的。


‌vector<int> a8[N];‌

这是一个静态数组,其中每个元素都是一个vector<int>,不同于第一个例子,这里的数组大小N必须在编译时就已知,且整个数组的大小在创建后是固定的。

‌优点‌:
可能的性能优势:由于是静态数组,其大小在编译时确定,可能在某些情况下提供更好的性能,尤其是在访问连续内存时。
‌缺点‌:
固定大小:数组的大小在创建后不能改变,这限制了其灵活性。
非标准C++:使用静态数组的方式在某些情况下可能不符合现代C++的最佳实践,尤其是在需要动态调整大小或跨函数共享数据时。
总结来说,选择哪种方式取决于具体需求,如果需要一个大小可变的二维数组,或者希望自动管理内存,那么vector<vector<int>>是一个好选择,如果知道数组的大小并且希望利用静态数组可能的性能优势,那么vector<int> a8[N];也可以考虑,不过,在现代C++编程中,推荐使用vector和智能指针等STL组件来管理动态数据结构,以减少内存管理错误和提高代码的可维护性

(2)size和empty:

1. size :返回实际元素的个数

2. empty :返回顺序表是否为空,因此是⼀个bool 类型的返回值

    a. 如果为空:返回true

    b. 否则,返回false

时间复杂度:O(1)

以下是具体使用方式,接下来我介绍的几个都是vector里常用的关键字,了解会用就行

void test_size()
{// 创建⼀个⼀维数组 vector<int> a1(6, 8);for(int i = 0; i < a1.size(); i++){cout << a1[i] << " ";}cout << endl << endl;// 创建⼀个⼆维数组 vector<vector<int>> a2(3, vector<int>(4, 5));for(int i = 0; i < a2.size(); i++){// 这⾥的 a2[i] 相当于⼀个 vector<int> a(4, 5) for(int j = 0; j < a2[i].size(); j++){cout << a2[i][j] << " ";}cout << endl;}cout << endl << endl;
}
(3)begin和end:

1. begin :返回起始位置的迭代器(左闭)

2. end :返回终点位置的下⼀个位置的迭代器(右开)

利⽤迭代器可以访问整个vector ,存在迭代器的容器就可以使⽤范围for 遍历

说到迭代器,还有一点不得不提一下我们的auto了:

在C++11及更高版本中,auto 关键字被引入以支持类型自动推导。这意味着编译器可以根据初始化表达式自动推断变量的类型,而无需指定,auto 的使用可以简化代码,尤其是在处理复杂类型或模板时:

int x = 10;
auto y = x; // y 的类型被推导为 int

当使用STL容器(如 vector, map, set 等)的迭代器时,auto 可以避免冗长的迭代器类型声明:

std::vector<int> vec = {1, 2, 3, 4};
for (auto it = vec.begin(); it != vec.end(); ++it){// it 的类型被推导为 std::vector<int>::iteratorstd::cout << *it << std::endl;}

还可以与语法糖结合在一起使用:

for (auto x : a)
{cout << x << "";
}
cout << endl;

当然这里的a是指一个vector<int>类型的变长数组

上面这两行代码都可以实现对a数组的遍历与打印

(4)front和back:

1. front :返回⾸元素

2. back :返回尾元素

时间复杂度:O(1)

//  ⾸元素和尾元素 
void test_fb()
{vector<int> a(5);for(int i = 0; i < 5; i++){a[i] = i + 1;}cout << a.front() << " " << a.back() << endl;
}

这个使用并不难,看一下了解即可

(5)resize和clear:

1.resize:修改vector 的大小

• 如果⼤于原始的大小,多出来的位置会补上默认值,⼀般是0 

• 如果⼩于原始的大小,相当于把后⾯的元素全部删掉。 时间复杂度:O(N) 

2.clear:清空vector

底层实现的时候,会遍历整个元素,⼀个⼀个删除,因此时间复杂度:O(N) 

// resize
void test_resize()
{vector<int> a(5, 1);a.resize(10); // 扩⼤ print(a);a.resize(3); // 缩⼩ print(a);
}// clear
void test_clear()
{vector<int> a(5, 1);print(a);a.clear();cout << a.size() << endl;print(a);
}

尾言:

欧克,全文终

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索AI在地质科研绘图中的应用:ChatGPT与Midjourney绘图流程与效果对比

文章目录 个人感受一、AI绘图流程1.1 Midjourney&#xff08;1&#xff09;环境配置&#xff08;2&#xff09;生成prompt&#xff08;3&#xff09;完善prompt&#xff08;4&#xff09;开始绘图&#xff08;5&#xff09;后处理 1.2 ChatGPT不合理的出图结果解决方案 二、主题…

融合表面信息和等变扩散的分子对接模型 SurfDock - 评测

SurfDock 是一个几何扩散模型&#xff0c;蛋白质序列、三维结构图、以及表面结构等结构特征&#xff0c;采用的是非欧里几何的范式处理小分子的旋转、平移以及扭转。 SurfaceDock 以蛋白口袋作为条件&#xff0c;从 rdkit 生成的随机小分子构象开始&#xff0c;对平移、旋转、扭…

CSS——2.书写格式一

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中&#xff1a;--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…

R机器学习:神经网络算法的理解与实操,实例解析

神经网络算法是一种模仿生物神经网络&#xff08;尤其是人脑&#xff09;结构和功能的算法。它由大量相互连接的节点&#xff08;称为神经元&#xff09;组成&#xff0c;这些神经元组织成层&#xff0c;通过传递信号来处理信息。神经网络算法在机器学习、人工智能等领域中扮演…

【C++】B2092 开关灯

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述和解析题目描述输入格式输出格式解析 &#x1f4af;实现代码对比&#xff1a;我的做法和老师的做法我的代码实现代码分析优点问题 老师的代码实现代码分析 &#x…

【PS不常见教程】实操篇之通道抠图-抠黑色背景的图片

观前小提示&#xff1a;本文内容为我原创成果&#xff0c;若您需要转载或引用其中图片或文字内容&#xff0c;请记得标注来源是“璞子的家”哦&#xff0c;感谢您的尊重&#xff0c;理解与支持&#xff0c;谢谢啦&#xff01; 如果没看过之前的文章&#xff0c;可以先看之前的两…

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器&#xff0c;递增的不太行&#xff0c;控制的不够准确&#xff0c;其次在大于10微秒的延时是非常准确的&#xff0c;小于的话&#xff0c;就没有那没准&#xff0c;但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…

【Cesium】三、实现开场动画效果

文章目录 实现效果实现方法实现代码组件化 实现效果 实现方法 Cesium官方提供了Camera的flyTo方法实现了飞向目的地的动画效果。 官方API&#xff1a;传送门 这里只需要用到目的地&#xff08;destination&#xff09;和持续时间&#xff08;duration&#xff09;这两个参数…

【游戏设计原理】47 - 超游戏思维

对于这条原理&#xff0c;我首先想到的是开放世界&#xff0c;或者探索性游戏&#xff0c;这是最能包容各类玩家的游戏类型。这类游戏定义了基本规则&#xff0c;玩家的可操作性很强。就像上图里的沙池一样&#xff0c;里面有滑梯&#xff0c;是规则性比较明确的&#xff0c;而…

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近&#xff0c;DeepSeek v3&#xff08;一个MoE模型&#xff0c;拥有671B参数&#xff0c;其中37B参数被激活&#xff09;模型全球爆火。 作为一款能与Claude 3.5 Sonnet&#xff0c;GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源&#xff0c;还放出一份扎实的技术…

Kbuild学习知识点

1.Kbuild本质&#xff1a;一个可扩展、可配置的Makefile框架&#xff0c;递归式Makefile&#xff0c;菜单式配置。 2.Kbuild构成&#xff1a; Makefile:顶层目录下的Makefile.config:内核的配置文件arch/S(ARCH)/Makefile:跟平台架构相关的Makefilescripts/Makefile.*:通用编…

C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)

1、本节要实现的内容 我们在前期的教程中,讨论了在即时渲染模式下的光照内容。但在我们后期使用着色器的核心模式下,会经常在着色器中使光照,我们这里就讨论一下着色器光照效果,以及光照贴图效果,同时这里知识会为后期的更多光照效果做一些铺垫。本节我们首先讨论冯氏光照…

后端java开发路由接口并部署服务器(四)

一、安装IntelliJ IDEA&#xff0c;安装包下载 1、官网下载 2、网盘资源 安装包下载完成后进行傻瓜式下一步安装就可以了 打开IntelliJ IDEA&#xff0c;输入网盘资源文件内容 三、汉化处理 插件搜索chinese&#xff0c;就会找到相应的插件安装重启软件即可 四、新建后端j…

一文理解ssh,ssl协议以及应用

在使用基于密钥的认证方式的时候&#xff0c;私钥的位置一定要符合远程服务器规定的位置&#xff0c;否则找不到私钥的位置会导致建立ssh连接失败 SSH 全称是 “Secure Shell”&#xff0c;即安全外壳协议。 它是一种网络协议&#xff0c;用于在不安全的网络中安全地进行远程登…

通往O1开源之路

“Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective”由复旦大学和上海人工智能实验室的研究者撰写。该论文从强化学习视角出发&#xff0c;深入分析了实现类似OpenAI o1模型性能的路线图&#xff0c;聚焦于策略初始化、奖…

FPGA、STM32、ESP32、RP2040等5大板卡,结合AI,更突出模拟+数字+控制+算法

板卡选择困难症了&#xff1f;如果你也想玩FPGA、STM32、ESP32、RP2040相关的板卡&#xff0c;不如看看以下几款板卡&#xff0c;如果正巧碰上能实现你想要做的项目呢~ 01 小脚丫FPGA STEP BaseBoard V4.0套件 STEP BaseBoard V4.0是第4代小脚丫FPGA扩展底板&#xff08;点击了…

python进阶06:MySQL

课后大总结 Day1 一、数据库命令总结 1.连接数据库 连接数据库进入mysql安装目录打开bin文件夹&#xff0c;输入cmd(此命令后无分号)mysql.exe -u root -ppassword命令后输入密码:root 设置密码set passwordpassword("root123"); 查看所有数据库show databases; …

lec7-路由与路由器

lec7-路由与路由器 1. 路由器硬件 路由器的硬件部分&#xff1a; 断电失去&#xff1a; RAM断电不失去&#xff1a;NVRAM&#xff0c; Flash&#xff0c; ROMinterface也算是一部分 路由器是特殊组件的计算机 console 口进行具体的调试 辅助口&#xff08;Auxiliary&…

HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级

注&#xff1a;本文为 “HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级” 相关文章合辑。 引文图片 csdn 转储异常&#xff0c;重传。 篇 1&#xff1a;Smart-Baby 回复中给出故障现象判断参考 篇 2、篇3 &#xff1a;HP 官方 BIOS 恢复、升级教程 开机黑屏&#xff0c…

代码随想录算法训练营第五十天|图论基础|深度优先搜索理论基础|KM98.所有可达路径|广度优先搜索理论基础

图论基础 1、图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 2、图的种类 整体上一般分为有向图和无向图&#xff1b; 有向图是指图中边是有方向的…