蓝桥杯备赛: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); }
尾言:
欧克,全文终
相关文章:
蓝桥杯备赛:C++基础,顺序表和vector(STL)
目录 一.C基础 1.第一个C程序: 2.头文件: 3.cin和cout初识: 4.命名空间: 二.顺序表和vector(STL) 1.顺序表的基本操作: 2.封装静态顺序表: 3.动态顺序表--vector:…...
MySQL数据库——常见慢查询优化方式
本文详细介绍MySQL的慢查询相关概念,分析步骤及其优化方案等。 文章目录 什么是慢查询日志?慢查询日志的相关参数如何启用慢查询日志?方式一:修改配置文件方式二:通过命令动态启用 分析慢查询日志方式一:直…...
【NX入门篇】
NX入门篇 一、UG NX 由来二、软件如何启动(UG NX 12.0)三、使用步骤四、常用命令 一、UG NX 由来 UG NX由来: 1969 年:UG 的开发始于美国麦道航空公司,基于 C 语言开发实现;1976 年:UG问世&am…...
卡码网 ACM答题编程模板
背景: input() 在 ACM 编程中的底层调用原理 1. input() 的核心原理 在 Python 中,input() 的底层实现依赖于标准输入流 sys.stdin。每次调用 input() 时,Python 会从 sys.stdin 中读取一行字符串,直到遇到换行符 \n 或文件结束…...
vue代理问题
vue代理问题 场景:前后端分离项目问题,在前端中请求接口,返回数据这个过程,但是在这个过程中,前端会有两个环境,一个是开发环境,一个是生产环境. 在开发环境中请求接口可能会遇到跨域问题,比如请求的端口是3000,当前端口是8080,这时候就会遇到跨域问题,或者ip不同,也会存在跨…...
软考 高级 架构师 第十 章软件工程3
1.系统测试 系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未被发现的错误的测试。 测试原则: 1)应尽早并不断的进行测试 2)测试工作应避免由原开发软件的人或小组承担 3)在 设计测试方案时&#…...
GoF23种设计模式 简介
文章目录 面向对象(OO)设计原则(7)单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建型模式 (5)工厂方法模式 (类模式,其余都是对象模式)抽象工厂模式建造…...
【FlutterDart】页面切换 PageView PageController(9 /100)
上效果: 有些不能理解官方例子里的动画为什么没有效果,有可能是我写法不对 后续如果有动画效果修复了,再更新这篇,没有动画效果,总觉得感受的丝滑效果差了很多 上代码: import package:flutter/material.…...
旧服务改造及微服务架构演进
旧服务改造及微服务架构演进 微服务架构演进1.微服务架构2.微服务架构的特点3.单体架构与微服务架构之间的对比4.微服务架构演进历程 旧服务改造1. 微服务拆分的一些通用原则2.微服务拆分策略(1)功能维度拆分策略(2)非功能维度拆分…...
数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
查找(检索): 定义:从给定的数据中找到对应的K 1,顺序查找: O(n)的从前向后的遍历 2,对半查找,要求有序 从中间开始查找,每次检查中间的是否正确,不正确就…...
根据docker file 编译镜像
比如给到一个Dockerfile 第一步编译镜像 cd /path/to/Dockerfiledocker build -t <DOCKER_IMAGE_NAME> . build 命令编译镜像 -t 镜像名字 . 指dockerfile 所在目录 如果遇到报错 [] Building 0.3s (3/3) FINISHED …...
C语言:调试的概念和调试器的选择
所谓调试(Dubug),就是跟踪程序的运行过程,从而发现程序的逻辑错误(思路错误),或者隐藏的缺陷(Bug)。 在调试的过程中,我们可以监控程序的每一个细节ÿ…...
Vulnhub靶场(Earth)
项目地址 https://download.vulnhub.com/theplanets/Earth.ova.torrent 搭建靶机 官网下载.ova文件双击vm打开导入 获取靶机IP kail终端输入 arp-scan -l 获取靶机 IP 192.168.131.184 信息收集 端口扫描 sudo nmap -sC -sV -p- 192.168.131.184 可以看到开启22端口&…...
rsync命令常用同步方案
rsync是一个高效的文件同步工具,广泛应用于本地和远程备份、镜像及同步任务。它通过增量同步、压缩传输以及远程协议(如SSH)等技术,显著提高了文件传输的效率。本文将介绍rsync命令的常用参数、工作原理、常见同步方案,…...
【Ubuntu】 Ubuntu22.04搭建NFS服务
安装NFS服务端 sudo apt install nfs-kernel-server 安装NFS客户端 sudo apt install nfs-common 配置/etc/exports sudo vim /etc/exports 第一个字段:/home/lm/code/nfswork共享的目录 第二个字段:指定哪些用户可以访问 * 表示所有用户都可以访…...
Python自学 - 递归函数
1 Python自学 - 递归函数 递归函数是一种在函数体内调用自己的函数,就像“左脚踩着右脚,再右脚踩着左脚… 嗯,你就可以上天了!”。递归函数虽然不能上天,但在处理某些场景时非常好用, 一种典型的场景就是遍…...
后端开发入门超完整速成路线(算法篇)
引言 后端开发是软件开发中不可或缺的一部分,它涉及到服务器、数据库、API等核心组件的构建和维护。对于初学者来说,掌握算法和数据结构是进入后端开发领域的基础。本文将为你提供一个超完整的算法学习路线,帮助你快速入门,并在文…...
51单片机——共阴数码管实验
数码管中有8位数字,从右往左分别为LED1、LED2、...、LED8,如下图所示 如何实现点亮单个数字,用下图中的ABC来实现 P2.2管脚控制A,P2.3管脚控制B,P2.4管脚控制C //定义数码管位选管脚 sbit LSAP2^2; sbit LSBP2^3; s…...
使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
目录 1.工具以及概念介绍 (1)Clion软件简介 (2)交叉编译 (3)远程编译 2.操作原理 3.详细操作步骤 (1)配置Clion与虚拟机ubuntu的ssh连接 CLion远程开发Ubuntu,并显…...
高并发写利器-组提交,我的Spring组件实战
高并发写优化理论 对于高并发的读QPS优化手段较多,最经济简单的方式是上缓存。但是对于高并发写TPS该如何提升?业界常用的有分库分表、异步写入等技术手段。但是分库分表对于业务的改造十分巨大,涉及迁移数据的麻烦工作,不会作为…...
Stable Diffusion的简单介绍
Stable Diffusion 是一款免费、开源的 AI 图像生成器,由 Stability AI 公司于 2022 年 8 月推出1。以下是关于它的详细介绍: 目录 工作原理 特点 应用场景 主要版本 工作原理 Stable Diffusion 属于潜在扩散模型,主要由三部分组成&…...
R语言的数据结构
R语言的数据结构 R语言是专门为统计计算和数据分析而设计的一种编程语言,因其强大的数据处理能力而受到广泛欢迎。在R中,数据结构是理解和有效使用R语言的基础。本文将详细介绍R语言中的主要数据结构,包括向量、矩阵、数据框、列表、因子等&…...
go项目zero框架中用gentool解决指定MYSQL表生成结构体被覆盖的解决方案
在使用 GoZero 框架进行项目开发时,gentool 是一个非常方便的工具,它可以根据数据库表结构自动生成 Go 语言结构体和其他相关文件。然而,在使用 gentool 生成结构体时,可能会遇到一个问题:如果多次运行 gentool&#x…...
限时特惠,香港服务器,低至53元/年
家人们谁懂啊!香港服务器这价格简直逆天了,居然比内地的还便宜!就拿阿里云来说,人家最低配置的服务器,价格都很难做到这么亲民。 最低配的就不说了,2 核 4G 的配置,应对日常业务稳稳当当&#x…...
【GUI-pyqt5】QObject类
1. QObject模块详解 1.1 描述 所有Qt对象的父类 1.2 功能和作用 1.2.1 对象名称和属性 1.2.1.1 API API功能备注 setObjectName("唯一名称") 给一个Qt对象设置一个名称 一般这个名称是唯一的,当做对象ID来使用 objectName() 获取一个对象名称 - set…...
第2章:SQL基础
第2章:SQL基础 2.1 SQL语言介绍 2.1.1 SQL发展历史 SQL的起源SQL标准的演变不同数据库的SQL实现 2.1.2 SQL语言分类 数据定义语言 (DDL):用于定义和修改数据库的结构,包括数据库、表、索引、视图等对象的创建、修改和删除。数据操作语言 (DML):用于…...
Azkaban其一,介绍、体系架构和安装
目录 一、简介 二、Azkaban的体系结构 三、Azkaban的安装步骤 1、上传,解压 2、生成mysql的元数据 3、配置web-server 4、配置exec-server 5、修改所有的.sh 的执行权限 一、简介 遇到了什么问题才会使用Azkaban ?比如: 想启动hadoop集群先启动…...
Seata 使用教程:全面解锁分布式事务管理
Seata 使用教程:全面解锁分布式事务管理 在当今分布式系统蓬勃发展的时代,微服务架构被广泛应用,随之而来的是分布式事务管理的难题。Seata 作为一款开源的分布式事务解决方案,为保障分布式系统的数据一致性提供了强有力的支持。本文将详细讲解 Seata 的使用方法,深入剖析…...
《learn_the_architecture_-_aarch64_exception_model》学习笔记
1.当发生异常时,异常级别可以增加或保持不变,永远无法通过异常来转移到较低的权限级别。从异常返回时,异常级别可能会降低或保持不变,永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理,异常必须在比…...
密码学原理技术-第十一章-Hash Functions
文章目录 总结Why we need hash functionsDigital Signature with a Hash FunctionBasic Protocol for Digital Signatures with a Hash FunctionPrincipal input–output behavior of hash functions Security propertiesThe three security requirements of hash functionsWh…...
Golang 入门基础知识
快速入门 go 语言笔记,参考了各种大佬的 blog 。 一、下载安装 国内站点 :https://golang.google.cn IDE : Goland (2020.12月以后破解有些困难 见 zhile.io, 无法试用的话可以搜一个注册码,失效的也可以&…...
SQL把字符串按逗号分割成记录
在 SQL 中,可以通过以下方法将字符串按逗号分割,并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法: 1. 使用 STRING_SPLIT(SQL Server 2016) STRING_SPLIT 是 SQL Server 提供的内置…...
HTML——26.像素单位
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>像素</title></head><body><!--像素:1.指设备屏幕上的一个点,单位px,如led屏上的小灯朱2.当屏幕分辨率固定时&…...
TIM的输出比较(PWM)
OC(Output Compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 初始化 1.开启RCC RCC_…...
李宏毅机器学习笔记-Transformer
目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己…...
【机器学习:三、常见的代价函数】
代价函数的选择与任务类型(回归、分类等)以及模型的具体目标密切相关。 回归任务中的代价函数 均方误差(Mean Squared Error, MSE) 公式: J ( θ ) 1 m ∑ i 1 m ( y i − y ^ i ) 2 J(\theta)\frac{1}{m}\sum_{i1}^m(y_i-\…...
React 数据是怎样传递的
写在前面 在 React 应用程序中,数据传递是非常重要的。它允许我们在组件之间共享信息和状态,从而构建出复杂的用户界面。本文将深入探讨 React 中的数据传递机制,包括 props、state 和 context API。我们还将通过实际例子来演示如何在项目中…...
Python入门教程 —— 高阶函数和装饰器
1.递归函数 什么是递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 递归函数的作用 举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n 解决办法1:使用循环来完成 def cal(num):result,i = 1,1while i <= num:result *= ii…...
RSA密码的安全性分析(简化版本)
RSA的安全性是基于分解大整数的困难性假定,之所以认为是假定是因为至今还未能证明大整数就是NP问题,也许有尚未发现的多项式时间分解算法。随着人类计算能力的不断提高,原来被认为是不可能分解的大数已经被成功分解。对于大整数的威胁除了人类…...
解决Vue中设置el-select的高度不生效问题
el-select是Element UI框架中的一个选择器组件,它允许用户从多个选项中选择一个或多个项目。但这里确存在一个小坑,我们可以看到直接修改el-select的高度是无法生效的 <template><div id"login"><el-select v-model"role…...
解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题
1 功能特点 openpyxl: 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作…...
高等数学学习笔记 ☞ 无穷小比较与等价无穷小替换
1. 无穷小比较 1. 本质:就是函数的极限趋于0时的速度,谁快谁慢的问题。 2. 定义:若是在同一自变量的变化过程中的无穷小,且,则: ①:若,则称是比的高阶无穷小,记作&…...
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法 前言解题思路关键点实现代码时间复杂度分析前言 在日常生活中,我们经常会遇到需要排队的场景,比如买票、候车、就餐等。在理想的排队情况下,人们会按照某种顺序(如先到先服务)整齐地排成一列。然而,总有一些人不遵…...
如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…...
提升汽车金融租赁系统的效率与风险管理策略探讨
内容概要 在汽车金融租赁系统这个复杂的生态中,提升整体效率是每个企业都渴望达成的目标。首先,优化业务流程是实现高效运行的基础。通过分析目前的流程,找出冗余环节并进行简化,能够帮助企业缩短审批时间,提高客户满…...
Git 入门(一)
git 工作流如下: 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订add(添加): 在提交前先将代码提交到暂存区com…...
pyinstaller冻结打包多进程程序的bug:无限创建进程直至系统崩溃
前面写过两篇相关的文章: PyQt应用程序打包Python自动按键 这两篇文章都没有提到下面的这个重要问题: 采用Pyinstaller冻结打包多进程程序时,必须非常小心。这个技术线在Windows上会有一个非常严重的Bug。直接运行打包后的程序会造成无限创…...
OSI模型的网络层中产生拥塞的主要原因?
( 1 )缓冲区容量有限;( 1.5 分) ( 2 )传输线路的带宽有限;( 1.5 分) ( 3 )网络结点的处理能力有限;( 1 分…...
服务器开发 的设计模式(Design Patterns)核心知识
服务器开发的设计模式(Design Patterns)核心知识 在现代软件开发中,设计模式是一组为解决特定问题而重用的解决方案。它们是经过时间考验的最佳实践,为开发人员提供了一种有效的解决方案来应对常见的软件设计问题。特别是在服务器…...
智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
本文要点 ]本项目的项目文件中的三个Part终于“拼”出来的(个别用词可能还需斟酌,但样子、格式和意思 差不多): Part1【凡间-AI众生】 人性化&去中心化-个体人生观 语言有关(语言交流-经验常识实践 信条 行为主义 随机数-本质偶然的 想…...