当前位置: 首页 > news >正文

学习笔记—C++—入门基础()

目录

C++介绍

参考文档

C++第一个程序

命名空间namespace

namespace的价值

namespace的定义

namespace使用

指定命名空间访问

using将命名空间中某个成员展开

展开命名空间中全部成员

输入和输出

缺省参数

函数重载

引用

引用的概念

应用

const引用

指针和引用的关系

inline

nullptr


C++介绍

“C++”是一种多功能的编程语言,它起源于1980年代初,由Bjarne Stroustrup在C语言的基础上发展而来。C++最初被设计为支持面向对象编程的C语言变体,后来经过多次迭代和标准化,发展成为一种广泛应用于系统软件、游戏开发、嵌入式系统等领域的语言。C++的发展经历了多个重要阶段,包括C++98、C++03、C++11、C++14、C++17、C++20和即将到来的C++23标准.

参考文档

Reference - C++ Reference

特点:通俗易懂                

https://zh.cppreference.com/w/cpp

特点:完整中文版

https://en.cppreference.com/w/

特点:完整英文版

C++第一个程序

// test.cpp
#include<iostream>
using namespace std;int main()
{cout << "hello world\n" << endl;return 0;
}

#include<iostream>是什么头文件

using namespace std;又是什么东西

打印“hello world”怎么变成了cout << "hello world\n" << endl;

命名空间namespace

namespace的价值

在C/C++中,变量、函数和后面要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全 局作用域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进行本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的。

c语言项目类似下面程序这样的命名冲突是普遍存在的问题,C++引入namespace就是为了更好的解决 这样的问题。

#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{// 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”printf("%d\n", rand);return 0;
}

当头文件只有stdio.h的时候是没有问题的,但是我们加上另一个头文件stdlib.h就会出现报错的现象,在stdlib这个库里面定义了一个rand 的函数,那么我们现在又在外面定义一个rand的变量,那么就会出现冲突

namespace的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。

namespace wuguo
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}

namespace本质是定义出⼀个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不在冲突了。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>int rind = 10;namespace wuguo
{int rind = 30;
}int main()
{printf("%d\n", rind);          //打印的是全局的10printf("%d\n", wuguo::rind);   //打印的是wuguo域里的30return 0;
}

C++中域有函数局部域全局域命名空间域类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离名字冲突就解决了局部域全局域除了会影响 编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期

int x = 0;//全局域namespace bit
{int x = 10;//命名空间域
}void func()
{int x = 20;//局部域
}int main()
{int x = 30;//局部域printf("%d\n", x);      //这里默认访问的是局部的这个x,因为搜索是先局部再全局搜索。printf("%d\n", bit::x); //这里就是访问命名空间域printf("%d\n", ::x);    //这里就是访问全局变量。return 0;
}

namespace只能定义在全局,当然他还可以嵌套定义

// 命名空间可以嵌套
namespace wuguo
{// 小王namespace xw{int rand = 10;int Add(int left, int right){return left + right;}}// 大王namespace dw{int rand = 20;int Add(int left, int right){return (left + right) * 10;}}
}int main()
{printf("%d\n", wuguo::pg::rand);printf("%d\n", wuguo::hg::rand);printf("%d\n", wuguo::pg::Add(10, 20));printf("%d\n", wuguo::hg::Add(10, 20));return 0;
}

• 项目工程中多文件中定义同名namespace会认为是⼀个namespace不会冲突

C++标准库都放在⼀个叫std(standard)的命名空间中。

namespace使用

指定命名空间访问

namespace wuguo
{int a = 0;int b = 1;
}
int main()
{printf("%d\n", wuguo::a);return 0;
}

项目中推荐这种方式。

using将命名空间中某个成员展开

namespace wuguo
{int a = 0;int b = 1;
}
//把wuguo域里的a展开了
using wuguo::a;
int main()
{printf("%d\n", a);return 0;
}

项目中经常访问的不存在冲突的成员推荐这种方式。

展开命名空间中全部成员

namespace wuguo
{int a = 0;int b = 1;
}
using namespace wuguo;
int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}

项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

输入和输出

<iostream>是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输

出对象,就是他们的库函数

std::cin 是istream类的对象,它主要面向窄字符(narrowcharacters(oftypechar))的标准输入流,就是输入

std::cout 是ostream类的对象,它主要面向窄字符的标准输出流,就是输出

std::endl 是⼀个函数,流插⼊输出时,相当于插入⼀个换行字符加刷新缓冲区,就是换行

<<是流插入运算符,>>是流提取运算符。

#include<iostream>
using namespace std;int main()
{// <<输出cout << "hello world\n";int i = 10;double d = 1.1;//>>输入cin >> i >> d;cout << i<<":"<<d << std::endl;return 0;
}

输入一个“整数” “空格” “小数”

输出“整数” “:” “小数”

缺省参数

缺省参数是一种便捷的机制,允许在函数声明时为参数指定默认值。如果在调用函数时省略了这些参数,编译器会自动使用它们的缺省值。使用缺省参数可以简化函数调用,减少冗余代码,并提高代码的可读性和灵活性。

全缺省参数:函数的所有参数都可以有缺省值,调用时可以不传递任何参数。
半缺省参数:只有部分参数有缺省值,这些缺省值必须从右向左依次指定,不能间断。
声明与定义分离:如果函数声明和定义分开,缺省参数只能在声明中指定,定义中不应再次指定。
缺省值的限制:缺省值必须是常量表达式或全局变量,不能是局部变量或动态分配的内存。
调用顺序:实参的传递顺序是从左向右,而形参的缺省值赋值顺序是从右向左。

#include <iostream>
#include <assert.h>
using namespace std;void Func(int a = 0)
{cout << a << endl;
}// 全缺省
void Func1(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}// 半缺省
void Func2(int a, int b = 10, int c = 20)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}int main()
{Func(); // 没有传参时,使用参数的默认值Func(10); // 传参时,使用指定的实参Func1();                 //a=10 b=20  c=30Func1(1);                //a=1  b=20  c=30Func1(1, 2);             //a=1  b=2   c=30Func1(1, 2, 3);          //a=1  b=2   c=3// 不支持// Func1(,2,3);Func2(100);              //a=100 b=10  c=20Func2(100, 200);         //a=100 b=200 c=20Func2(100, 200, 300);    //a=100 b=200 c=300return 0;
}

函数重载

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同⼀作用域中出现同名函数的。

函数名称必须相同

参数列表必须不同,这包括参数的个数、类型或顺序的不同。

返回类型不影响函数重载,即使两个函数的返回类型不同,它们也可以构成重载,因为重载决策是基于函数的参数列表进行的。

void ADD(int a, int b)
{cout << a + b << endl;
}void ADD(double a, int b)
{cout << a + b << endl;
}void ADD(int a, double b)
{cout << a + b << endl;
}int main()
{ADD(1, 1);ADD(1, 1.1);ADD(1.1, 1);return 0;
}

引用

引用的概念

在C++中,引用是一种特殊的变量类型,它提供了对另一个变量的别名。

引用在语法层面是不开辟空间的

在底层引用类似于指针变量是开辟空间

void Test()
{int a = 10;//定义引用类型ra就是a的别名,地址也是一样的int& ra = a;printf("%p\n", &a);printf("%p\n", &ra);
}​

应用

作为函数参数

//作为函数参数
​void Swap(int& left, int& right)
{int temp = left;left = right;right = temp;
}int main()
{int x = 0, y = 1;cout << x << " " << y << endl;Swap(x, y);cout << x << " " << y << endl;return 0;
}//传返回值
int& STTop(ST& rs)
{assert(rs.top > 0);return rs.a[rs.top];
}
STTop(st1)++;
​

易错示例

int& Add(int a, int b)
{int c = a + b;return c;
}
int main()
{int& ret = Add(1, 2);Add(3, 4);cout << "Add(1, 2) is :"<< ret <<endl;return 0;
}

这个代码将C的值返回,返回值是别名,当调用函数的时候,函数会建立栈帧,当调用结束的时候,这空间的随之就会返回给操作系统,C变量也就不会存在。输出是随机值。

const引用

可以引用⼀个const对象,但是必须用const引用const引用也可以引用普通对象,因为对象的访 问权限在引用过程中可以缩小,但是不能放大

int main()
{//a不能进行修改,所以不能取别名,取别名的话是会对a造成修改的风险的const int a = 10;//在引用的过程中权限不能放大//int& ra = a;//那么这里的ra就是const对象const int& ra = a;//cnost引用普通的对象//权限可以缩小int b = 1;//rb不能进行修改,b能被修改const int& rb = b;//rb++;b++;//x不能修改const int x = 0;//这里是拷贝赋值,所以可以修改y对x没有影响int y = x;return 0;
}

指针问题

int main()
{//a是不能进行修改的const int a = 10;//√p1固定指a不能被修改const int* p1 = &a;//×权限的放大int* p2 = p1;int b = 20;//√p3存的是b的地址int* p3 = &b;//√p4也是b的地址,只读不改const int* p4 = p3;return 0;
}

指针和引用的关系

C++中指针和引用就像两个性格迥异的亲兄弟,指针是哥哥,引用是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有自己的特点,互相不可替代。

• 语法概念上引用是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。

• 引用在定义时必须初始化,指针建议初始化,但是语法上不是必须的。

• 引用在初始化时引用⼀个对象后,就不能再引用其他对象;而指针可以在不断地改变指向对象。

• 引用可以直接访问指向对象,指针需要解引用才是访问指向对象。

• sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)

• 指针很容易出现空指针和野指针的问题,引用很少出现,引用使用起来相对更安全⼀些。

inline

用inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地方展开内联函数,这样调用内联函数就不需要建立栈帧了,就可以提高效率。

宏定义的问题

 //实现⼀个ADD宏函数的常⻅问题
#define ADD(int a, int b) return a + b;
#define ADD(a, b) a + b;
#define ADD(a, b) (a + b)//正确的宏实现
#define ADD(a, b) ((a) + (b))

 为什么不能加分号?宏是替换机制的  ,在宏定义后面加分号的话就有问题了
 为什么要加外面的括号?   不加外面的括号这个优先级就有问题了
 为什么要加里面的括号?   同样是为了保持优先级


int main()
{int ret = ADD(1, 2);//宏是替换机制的cout << ret << endl;;cout << ADD(1, 2) << endl;     //第一个问题cout << ADD(1, 2) * 5 << endl;    //第二个问题int x = 1, y = 2;ADD(x & y, x | y); // -> (x&y+x|y)  第三个问题return 0;
}

 inline对于编译器而言只是⼀个建议,也就是说,你加了inline编译器也可以选择在调用的地方不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。

inline适用于频繁调用的短小函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。

debug是默认不展开的,release是展开的

debug展开方式

展开了就没有栈帧的消耗,不展开就有,如果函数较长的话,就不展开了。

nullptr

NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,可以看到如下代码:

#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif
#endif

C++中NULL可能被定义为字面常量0,或者C中被定义为无类型指针(void)的常量。不论采取何种定义,在使用空值的指针时,都不可避免的会遇到⼀些麻烦,本想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,调用了f(int x),因此与程序的初衷相悖。f((void*)NULL);调用会报错。

C++11中引入nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字面量,它可以转换成任意其他类型的指针类型。使用nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,而不能被转换为整数类型

在c++中使用nullptr来定义空指针可以避免类型转换的问题

void f(int x)
{cout << "f(int x)" << endl;
}void f(int* ptr)
{cout << "f(int* ptr)" << endl;
}int main()
{f(0);        //调用第一个//f(NULL);   //调用第二个//f((void*)0);f(nullptr);  //在c++中使用nullptr来定义空指针可以避免类型转换的问题return 0;
}

相关文章:

学习笔记—C++—入门基础()

目录 C介绍 参考文档 C第一个程序 命名空间namespace namespace的价值 namespace的定义 namespace使用 指定命名空间访问 using将命名空间中某个成员展开 展开命名空间中全部成员 输入和输出 缺省参数 函数重载 引用 引用的概念 应用 const引用 指针和引用的关…...

Pytorch实现之利用深度残差GAN做运动图像的去模糊

简介 简介:采用类似U-Net的解码编码的结构,结合10层的残差连接结构作为生成器,改进PatchGAN得到更大的感受野来作为鉴别器。生成器的损失为内容损失,鉴别器的损失为WGAN-GP损失。大家可以尝试这个模型来解决运动图像的去模糊化。 论文题目:基于深度残差生成对抗网络的运…...

[Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集

[Windows] XHS-Downloader 链接&#xff1a;https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款开源免费的小红书内容下载工具&#xff0c;支持无水印视频 / 图文提取、多链接批量处理及账号作品采集。其核心优势包括&#xff1a; 全平台…...

从零构建大语言模型全栈开发指南:附录与资源-2.数据集大全-公开语料库、多模态数据集与领域专用数据源

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录与资源-2. 数据集大全:公开语料库、多模态数据集与领域专用数据源一、公开语料库:通用语言模型的基石1.1 主流文本语料库1.2 预处理工具与策略二、多模态数据集:跨模态理解的桥梁2.1 视觉-语言数…...

SDL多线程编程

文章目录 1. SDL 线程基础2. 线程同步3. 线程池4. 注意事项5. 示例:在多个线程中进行图形渲染和输入处理总结在 SDL(Simple DirectMedia Layer)中,多线程编程通常用于提高应用程序的响应性和性能,尤其是在需要同时处理多个任务的场景中,例如渲染、输入处理和音频等。SDL …...

LINUX 4 tar -zcvf -jcvf -Jcvf -tf -uf

cp -r mv: 1.移动文件到目录 2.文件改名 3.目录改名 s 上面是打包 下面是打包并压缩...

STL剖析

1. vector 是一个封装了动态大小数组的顺序容器&#xff1b;数组内容器严格按照线性顺序排序&#xff0c;支持随机访问&#xff0c;因此提供随机访问指针&#xff0c;例如vector::iterator ivite; 并且为了降低空间配置得速度成本&#xff0c;vector实际分配大小要比需求大一点…...

【数据集】Romanov数据集

1. 数据集背景 名称&#xff1a;Romanov 单细胞转录组数据集 来源&#xff1a;Romanov et al., Cell Reports, 2017 原始论文标题&#xff1a; "Molecular interrogation of hypothalamic organization reveals distinct dopamine neuronal subtypes" GEO Accession…...

Baklib企业CMS的核心要素是什么?

企业CMS工作流协同创新 现代企业内容管理的核心挑战在于多角色协作效率与流程可视化的平衡。以Baklib为代表的协同型CMS&#xff0c;通过动态权限分级架构与实时版本追踪技术&#xff0c;构建了从内容草拟、多级审批到版本发布的完整闭环。系统支持多人同时编辑功能&#xff0…...

JavaWeb 课堂笔记 —— 02 JavaScript

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…...

Kafka 回溯消费

Kafka 回溯消费 是一个非常实用的能力&#xff0c;尤其当你&#xff1a; 消费端挂掉/处理异常消息数据出错/业务需要重跑要对某一段历史数据“重新拉取并消费”日志审计/数据补偿/BI分析 下面我来详细讲讲 Kafka 如何实现“回溯消费”&#xff0c;并配上使用方式、注意事项 &…...

LeetCode算法题(Go语言实现)_32

题目 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n-1-i) 个节点 。 比方说&#xff0c;n 4 那么节点 0 是节点 3 的孪生节点&#xff0c;节点 1 是…...

CSS Text(文本)学习笔记

一、文本格式化 CSS 提供了多种文本格式化属性&#xff0c;用于控制文本的外观和布局。这些属性可以改变文本的颜色、对齐方式、修饰、大小写转换、缩进等。 1. 文本颜色 CSS 的 color 属性用于设置文本的颜色。颜色可以通过以下方式指定&#xff1a; 十六进制值&#xff1a…...

MySQL篇(五)MySQL主从同步原理深度剖析

MySQL篇&#xff08;五&#xff09;MySQL主从同步原理深度剖析 MySQL篇&#xff08;五&#xff09;MySQL主从同步原理深度剖析一、引言二、MySQL主从同步基础概念主库&#xff08;Master&#xff09;从库&#xff08;Slave&#xff09;二进制日志&#xff08;Binary Log&#x…...

AGI大模型(10):prompt逆向-巧借prompt

1 提示词逆向 明确逆向提示词⼯程概念 我们可以给ChatGPT提供⼀个简洁的提示词,让它能够更准确地理解我们所讨论的“逆向提示词⼯程”是什么意思,并通过这个思考过程,帮它将相关知识集中起来,进⽽构建⼀个专业的知识领域 提示词:请你举⼀个简单的例⼦,解释⼀下逆向pro…...

【问题记录】C语言一个程序bug定位记录?(定义指针数组忘记[])

背景 写了个小的程序&#xff0c;一直段错误。特此记录 代码 主要代码 int main_mytest(int argc, char *argv) {char *argv_my {"echo","/proc/cpuinfo",};main_mytest(sizeof(argv_my)/sizeof(char*), argv_my); }int main_mytest(int argc, char *a…...

Systemd构建自动化备份服务与外部存储管理

实训背景 你是一家数据公司的系统管理员&#xff0c;需设计一套自动化备份系统&#xff0c;满足以下需求&#xff1a; 定期备份&#xff1a;每周日凌晨1点将 /data 目录压缩备份到 /backups。外部存储挂载&#xff1a;插入USB设备时自动挂载到 /mnt/usb&#xff0c;并触发增量…...

基于Python的微博数据采集

摘要 本系统通过逆向工程微博移动端API接口,实现了对热门板块微博内容及用户评论的自动化采集。系统采用Requests+多线程架构,支持递归分页采集和动态请求头模拟,每小时可处理3000+条数据记录。关键技术特征包括:1)基于max_id的评论分页递归算法 2)HTML标签清洗正则表达…...

Linux | I.MX6ULL开发板固件烧录所需文件详述(9)

01 搞清楚手里的开发板是 EMMC 还是 NAND FLASH 。默认我的商业级是EMMC ,开关:10011010 终结者i.MX6ULL 开卡板分为工业级和商业级两种不同的开发板。 商业级的核心板,它的存储是 EMMC 的,EMMC 的存储是类似于正方形的芯片,旁边是 NAND FLASH的一个封装,因为我们这里…...

单片机实现多线程的方法汇总

在单片机上实现“多线程”的方法有几种&#xff0c;下面按照从简单到复杂、从轻量到系统性来列出常见的方案&#xff1a; &#x1f9f5; 一、伪多线程&#xff08;最轻量&#xff09; 方法&#xff1a;主循环 状态机 / 定时器轮询 主循环中轮流调用各个任务的处理函数&#x…...

探秘叁仟智盒设备:智慧城市的智能枢纽

在智慧城市建设的宏伟蓝图中&#xff0c;各类先进技术与设备层出不穷&#xff0c;叁仟智盒设备作为其中的关键一环&#xff0c;正悄然发挥着巨大作用&#xff0c;为城市的智能化转型注入强大动力。 一、叁仟智盒设备概述 叁仟智盒设备是杭州叁仟智慧城市科技有限公司旗下的重…...

(一)前端程序员转安卓开发分析和规划建议

最近因为公司前端业务萎缩&#xff0c;考虑内部转安卓开发岗&#xff0c;结合自己的经验分享几点建议。前端程序员转安卓开发是一个值得深入分析和规划的职业转型选择。以下是对这一转型的详细分析以及具体的规划建议&#xff0c;帮助大家更好地理解和准备这一转变。 一、技能和…...

配置管理:夯实软件开发与运维根基

配置管理是对系统配置信息进行管理的活动&#xff0c;以下从定义、目的、主要活动、实施流程等方面为你详细介绍&#xff1a; 一、定义 配置管理是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的目标是记录软件产品的演化过程&a…...

PyTorch构建自定义模型

PyTorch 提供了灵活的方式来构建自定义神经网络模型。下面我将详细介绍从基础到高级的自定义模型构建方法&#xff0c;包含实际代码示例和最佳实践。 一、基础模型构建 1. 继承 nn.Module 基类 所有自定义模型都应该继承 torch.nn.Module 类&#xff0c;并实现两个基本方法&…...

JVM虚拟机篇(一)深入理解JVM:组成部分、运行流程及程序计数器详解

JVM虚拟机篇&#xff08;一&#xff09;深入理解JVM&#xff1a;组成部分、运行流程及程序计数器详解 JVM虚拟机篇&#xff08;一&#xff09;深入理解JVM&#xff1a;组成部分、运行流程及程序计数器详解一、引言二、JVM的组成部分2.1 类加载子系统2.2 运行时数据区2.3 执行引…...

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.1.2Tokenization策略:BPE算法与词表设计

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.1.2 Tokenization策略:BPE算法与词表设计1. BPE(Byte-Pair Encoding)算法原理与实现1.1 BPE核心思想1.2 BPE算法步骤2. 词表设计关键要素2.1 词表规模与模型性能2.2 特殊标记设计3. BPE变体与改进算…...

学透Spring Boot — 013. Spring Web-Flux 函数式风格的控制器

这是我的学透Spring Boot的第13篇文章&#xff0c;更多文章请移步我的专栏 学透 Spring Boot_postnull咖啡的博客-CSDN博客 目录 传统风格的Spring MVC 函数式编程风格的Spring MVC 引入WebFlux依赖 定义Handler类 定义Router类 WebFlux不生效 灵魂拷问 Spring Web MVC…...

L33.【LeetCode题解】快乐数(双指针思想)

目录 1.题目 2.分析 3.代码 4.提交结果 5.题外话 证明:一定是循环的 前置知识:鸽巢原理 不严格证明 1.题目 https://leetcode.cn/problems/happy-number/ 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将…...

gltf unity-Unity中Gltf模型的使用与优化技巧

在现代游戏开发和3D应用领域&#xff0c;高质量模型是提升用户体验的关键因素之一。GLTF&#xff08;GL Transmission Format&#xff09;作为一款开放标准的3D模型交换格式&#xff0c;已经被越来越多的开发者所认可。Unity引擎&#xff0c;作为全球领先的3D游戏开发平台&…...

Oracle数据库指南

目录 一、前言 二、Oracle数据库基础入门篇 1. Oracle体系结构概述 2. 安装与配置 3. SQL语言入门 三、PL/SQL编程与高级特性 1. PL/SQL基础语法 2. 触发器与任务调度 3. 高级特性 四、日常维护与监控 1. 备份与恢复策略 2. 日志管理与故障排查 3. 自动化运维 五…...

Qt -信号与槽

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 前言引入connect调用链模板类型的connectQObject::connectImplQObjectPrivate::connectImpl qobject_p_p.hconnect作用总结ai对信号与槽的模拟实现 前言 面向对象&am…...

macos 魔搭 模型下载 Wan-AI ComfyUI

环境安装 ➜ ~ sw_vers ProductName: macOS ProductVersion: 15.3.2 ➜ ~ pip --version pip 24.3.1 from /opt/homebrew/lib/python3.11/site-packages/pip (python 3.11)安装ModelScope SDK pip install modelscope➜ ~ modelscope download --help Traceback (most r…...

Xshell Plus 6下载与安装

文章目录 Xshell Plus 6 简介&#xff08;一&#xff09;网络连接与协议支持&#xff08;二&#xff09;会话管理&#xff08;三&#xff09;安全特性&#xff08;四&#xff09;文件传输功能&#xff08;因集成Xftp 6 &#xff09;&#xff08;五&#xff09;个性化与便捷功能…...

Kubernetes 集群搭建(一):从环境准备到 Calico 网络插件部署

&#xff08;一&#xff09;虚拟环境准备 名称ip备注m1192.168.101.131mastern1192.168.101.132workern2192.168.101.133worker &#xff08;二&#xff09;集群统一配置 2.1 关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld sed -i s/enforcin…...

【国产突围!致远电子ZXDoc如何打破Vector垄断,成为新能源车研发“神器”?】

摘要&#xff1a;在汽车“新四化”浪潮下&#xff0c;国产汽车总线工具链软件正迎来高光时刻&#xff01;广州致远电子推出的ZXDoc以全栈自主化技术硬核国产芯片生态&#xff0c;斩获2024金辑奖“最佳技术实践应用奖”&#xff0c;成为新能源车企研发工程师的“效率倍增器”。本…...

3-Visual Studio 2022打包NET开发项目为安装包

引言 本文将上一期博文>>>门店管理系统开发<<<开发的项目打包为Windows安装包 一&#xff0c;安装扩展 安装此扩展&#xff1a;installer Projects 二&#xff0c;创建安装程序项目 创建项目 右键解决方案-添加-新建项目 选择setup Project项目 填写项目名…...

Cookie、Session、Token、JWT的区别和使用场景

Cookie、Session和Token的区别 存储位置数据容量安全性生命周期性能Cookie客户端&#xff08;通常是浏览器&#xff09;4KB、Cookie数量也有限制不安全、XSS&#xff08;跨站脚本攻击&#xff09;、CSRF&#xff08;跨站请求伪造&#xff09;可以设置过期时间&#xff0c;过期后…...

P1883 【模板】三分 | 函数

题目描述 给定 n 个二次函数 f1​(x),f2​(x),…,fn​(x)&#xff08;均形如 ax2bxc&#xff09;&#xff0c;设 F(x)max{f1​(x),f2​(x),...,fn​(x)}&#xff0c;求 F(x) 在区间 [0,1000] 上的最小值。 输入格式 输入第一行为正整数 T&#xff0c;表示有 T 组数据。 每组…...

Ruoyi-vue plus 5.2.2 flowble设计流程点击开始流程图错误

网关设置条件或者是事件删除后出现&#xff0c;点击网关节点无法找到下面的事件节点。 配置页面事件错误&#xff0c;点背景配置进去了事件&#xff0c;发现再次加载&#xff0c;或者删除的时候VUE页面无法加载。 解决方式&#xff1a;查看XML文件&#xff0c;这个节点是否存在…...

MySQL学习笔记(三)——图形化界面工具DataGrip

目录 1. 图形化界面工具 2.下载 3. 安装 3.1 安装步骤 3.2 激活说明 4. 使用 4.1 汉化教程 4.2 使用 1. 图形化界面工具 上述&#xff0c;我们已经讲解了通过 DDL 语句&#xff0c;如何操作数据库、操作表、操作表中的字段&#xff0c;而通过 DDL 语句执行在命令进行操…...

keil软件仿真

设置 选择软件仿真。 修改参数。 获取参数 找到自己的芯片信号。这里用的是F103ZET6 复制下来&#xff0c;并对其进行修改。 接下来进入仿真即可...

每日一题(小白)模拟娱乐篇14

直接理解题意&#xff0c;一分钟扩散一次&#xff0c;那么2020分钟也就是需要循环2020次&#xff0c;然后加入扩散后的条件&#xff0c;每一个次扩散使方格子的总量1&#xff08;只要有一个点扩散就无需看其他的点&#xff09;&#xff0c;若干次循环过后总数之和即所有黑色格子…...

(二)使用Android Studio开发基于Java+xml的安卓app之环境搭建

以下是使用Android Studio搭建基于Java和XML的Android应用开发环境的详细步骤&#xff1a; 一、系统要求 操作系统&#xff1a;Windows 7/8/10/11&#xff08;64位&#xff09;内存&#xff1a;建议8GB及以上磁盘空间&#xff1a;至少5GB空闲&#xff08;建议预留10GB以上&…...

STM32定时器通道1-4(CH1-CH4)的引脚映射关系

以下是 STM32定时器通道1-4(CH1-CH4)的引脚映射关系的详细说明,以常见型号为例。由于不同系列/型号差异较大,请务必结合具体芯片的参考手册确认。 一、STM32F1系列(如STM32F103C8T6) 1. TIM1(高级定时器) 通道默认引脚重映射引脚(部分/完全)备注CH1PA8无互补输出CH1…...

看爬山虎学本领 软爬机器人来创新 各种场景能适应

*本文只做阅读笔记分享* 一、灵感来源&#xff1a;向植物取经 大家好&#xff01;今天来聊一款超酷的软爬机器人&#xff0c;它的灵感来自会攀爬的植物——爬山虎。 大家都知道&#xff0c;爬墙高手爬山虎能在各种复杂墙面轻松生长攀爬&#xff0c;可现有的攀爬机器人在复杂…...

Spring AI Alibaba示例项目深度解析:dashscope-audio子模块详解

Spring AI Alibaba示例项目深度解析:dashscope-audio子模块详解 一、模块定位与核心价值 1.1 功能定位 • 音频处理核心组件:基于阿里云DashScope平台实现STT(语音识别)和TTS(文生语音)双模态能力 • 企业级解决方案:提供同步/异步/流式三种调用范式,适配不同业务场景…...

Linux 下 日志系统搭建全攻略

目录 一、引言 二、日志系统基础 日志级别 日志输出格式 三、创建日志所需函数 认识可变参数 ​编辑 获取时间的函数 小结 四、创建日志 一、引言 在 Linux 环境中开发 C/C 程序时&#xff0c;日志系统是不可或缺的一部分。它不仅有助于调试程序、排查问题&#xff…...

前端布局难题:父元素padding导致子元素无法全屏?3种解决方案

大家好&#xff0c;我是一诺。今天要跟大家分享一个我在实际项目中经常用到的CSS技巧——如何让子元素突破父元素的padding限制&#xff0c;实现真正的全屏宽度效果。 为什么会有这个需求&#xff1f; 记得我刚入行的时候&#xff0c;接到一个需求&#xff1a;要在内容区插入…...

写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码?

VB.NET 写.NET可以指定运行SUB MAIN吗?调用任意一个里面的类时,如何先执行某段初始化代码? 分享 1. 在 VB.NET 中指定运行 Sub Main 在 VB.NET 里&#xff0c;你能够指定 Sub Main 作为程序的入口点。下面为你介绍两种实现方式&#xff1a; 方式一&#xff1a;在项目属性…...

蓝桥杯单片机频率

long int Freq; unsigned int Timer_1000Ms; 加上 TMOD | 0x05; void Timer0Init(void) //0毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0; //设置定时器模式TMOD | 0x05;TL0 0x00; //设置定时初值TH0 0x00; //设置定时初值TF0 0; //清除TF0标…...