C++基础(1)
目录
1. C++发展历史
2. C++第一个程序
3. 命名空间
3.1 namespace的价值
3.2 命名空间的定义
3.3 命名空间的使用
4. C++输入和输出
5. 缺省参数
6. 函数重载
6.1 实现函数重载的条件
6.2 函数重载的应用
1. C++发展历史
C++的起源可以追溯到1979年,当时BjarneStroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发工作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。
1983年,BjarneStroustrup在C语言的基础上添加了面向对象编程的特性,设计出了C++语言的雏形, 此时的C++已经有了类、封装、继承等核心概念,为后来的面向对象编程奠定了基础。这一年该语言被正式命名为C++。
随着C++的应用日益广泛,对其进行标准化的需求也越来越迫切。1990年,C++的标准化工作正式启动,由美国国家标准协会(ANSI)和国际标准化组织(ISO)共同负责。
C++的标准化过程是一个充满挑战和争议的过程。在长达八年的时间里,来自不同国家和背景的开发者们就C++的语法、语义、库和运行时环境等方面进行了深入的讨论和协商。最终,在1998年,C++的第一个国际标准ISO/IEC 14882:1998正式发布,标志着C++的正式成熟和广泛应用。
2. C++第一个程序
C++兼容C语言绝大多数的语法,所以C语言实现的helloworld依旧可以运行,C++中需要把文件后缀改为.cpp,vs编译器看到是.cpp就会调用C++编译器编译,linux下要用g++编译,不再是gcc。
#include<stdio.h>
int main()
{printf("hello world\n");return 0;
}
当然C++有一套自己的输入输出,严格说C++版本的helloworld应该是这样写的:
#include<iostream>
using namespace std;
int main()
{cout << "hello world" << endl;return 0;
}
3. 命名空间
3.1 namespace的价值
在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作同域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
如下面C语言程序存在的命名冲突问题:
#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main()
{ printf("%d\n", rand);return 0;
}
运行结果:
运行时编译报错,编译时头文件<stdlib.h>中有一个rand()函数,是用来产生随机数的一个函数,与我们定义的变量rand名字一样,就产生重定义,为了避免这种情况发生,namespace关键字闪亮登场。
3.2 命名空间的定义
- 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。
- namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand变量就不存在冲突了。
- C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。
- namespace只能定义在全局,当然还可以嵌套定义。
- 项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突。
- C++标准库都放在一个叫std(standard)的命名空间中。
#include<stdio.h>
#include<stdlib.h>
namespace dog //dog是命名空间的名字,⼀般开发中是⽤项⽬名字作为命名空间名字。
{int rand = 10;
}int m = 5;int main()
{ printf("%p\n", rand); //stdlib.h头文件rand变量是一个指针,我们用%p打印printf("%d\n", dog::rand); //::域作用限定符 指定命名空间中的rand,打印10int m = 55;printf("%d\n", m); //局部变量优先,打印55printf("%d\n", ::m);//访问全局变量m,打印5return 0;
}
运行结果:
//命名空间中可以定义变量/函数/类型
#include<stdio.h>
#include<stdlib.h>
namespace dog
{ int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}int main()
{printf("%d\n", dog::Add(1, 2)); //3struct dog::Node p1;//定义结构体变量return 0;
}
//命名空间可以嵌套定义,解决一个命名空间存在同名变量问题
#include<stdio.h>
#include<stdlib.h>namespace dog
{namespace cat{int rand = 10;int Add(int left, int right){return left + right;}}namespace tiger{int rand = 20;int Add(int left, int right){return (left + right) * 10;}}
}int main()
{printf("%d\n", dog::cat::rand); //10printf("%d\n", dog::tiger::rand);//20return 0;
}
3.3 命名空间的使用
编译查找一个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找。所以下面程序会编译报错:
#include<stdio.h>
namespace dog
{int a = 0;
}int main()
{ printf("%d\n", a);return 0;
}
运行结果:
所以我们要使用命名空间中定义的变量/函数,有三种方式:
- 指定命名空间访问,项目中推荐这种方式。
- using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。
- 展开命名空间中全部成员,项目不推荐,冲突风险很大,日常为了方便练习程序推荐使用。
#include<stdio.h>
namespace dog
{int a = 0; int b = 1;
}int main()
{ printf("%d\n", dog::a); //指定命名空间访问return 0;
}
#include<stdio.h>
namespace dog
{int a = 0;int b = 1;
}
using dog::a; //using将命名空间中某个成员展开int main()
{printf("%d\n", a);printf("%d\n", a);printf("%d\n", a);printf("%d\n", a);printf("%d\n", a);printf("%d\n", dog::b);return 0;
}
#include<stdio.h>
namespace dog
{int a = 0; int b = 1;
}
using namespace dog; //展开命名空间中的全部成员int main()
{ printf("%d\n", a);return 0;
}
4. C++输入和输出
- <iostream> 是Input Output Stream的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
- std::cin 是istream类的对象,它主要面向窄字符(narrow characters (of type char))的标准输入流。
- std::cout 是ostream类的对象,它主要面向窄字符的标准输出流。
- std::endl 是一个函数,流插入输出时,相当于插一个换行字符加刷新缓冲区。
- << 是流插入运算符,>> 是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
- 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型(本质是通过函数重载实现的),其实最重要的是 C++的流能更好的支持自定义类型对象的输入输出。
- cout /cin /endl 等都属于C++标准库,C++标准库都放在一个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去用他们。
- 一般日常练习中我们可以展开命名空间中全部成员 (using namespace std),实际项目开发中不建议。
- 在vs中没有包含<stdio.h>,也可以使用printf 和scanf,在包含<iostream>间接包含了,vs系列编译器是这样的,其他编译器可能会报错。
#include<iostream>
using namespace std;int main()
{int a = 0;double b = 3.1;char c = 'y';cout << a << " " << b << " " << c << endl;std::cout << a << " " << b << " " << c << endl;cout << endl;//可以自动识别变量的类型cin >> a >> b >> c;cout << a << " " << b << " " << c << endl;return 0;
}
运行结果:
//C++兼容C语言,如果想控制精度打印的话可以直接使用printf
#include<iostream>
using namespace std;int main()
{double b = 22345.666666;printf("%.2lf\n", b);cout << b << endl;//cout 输出默认精度为 6 位有效数return 0;
}
运行结果:
C++ IO的性能
C++为了兼容C语言,会做出一些妥协优化。C语言的缓冲区只有遇到刷新标志时才会进行刷新,而如果printf缓冲区还没有刷新,我们使用
cout
会出现什么情况?会先把printf
缓冲区刷新出来,再打印cout
输出的内容,所以cout
之前会先对缓冲区进行检查!所以C++风格IO需要和C风格IO进行缓冲区同步!
对于有大量IO的场景,C++的IO效率会比C风格IO慢,可以进行下面优化:
#include<iostream>
using namespace std;
int main()
{// 在IO需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码,可以提⾼C++ IO效率 ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;
}
5. 缺省参数
- 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
- 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左 依次连续缺省,不能间隔跳跃给缺省值。
- 带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。
- 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。
- 缺省值必须是常量,C语言不支持缺省参数(编译器不支持)。
#include <iostream>
using namespace std;void Func(int a = 0)
{cout << a << endl;
}
int main()
{Func(); //没有传参时,使⽤参数的默认值Func(10); //传参时,使⽤指定的实参return 0;
}
运行结果:
第一个形参没有给出缺省参数值,至少传入一个实参。
第一、二个形参无缺省参数值,至少传入两个实参。
三个形参均无缺省参数值,需传入三个实参 。
#include <iostream>
using namespace std;//全缺省
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()
{ //从左到右依次给实参Func1();Func1(1);Func1(1, 2);Func1(1, 2, 3);Func2(100);Func2(100, 200);Func2(100, 200, 300);return 0;
}
运行结果:
6. 函数重载
C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。
6.1 实现函数重载的条件
- 参数个数不同
- 参数类型不同
- 参数顺序不同
#include<iostream>
using namespace std;// 1、参数类型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}
double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}// 2、参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}int main()
{Add(1, 2);Add(1.1, 2.2);f();f(5);f(8, 'm');f('n', 4);return 0;
}
运行结果:
#include<iostream>
using namespace std;
//下面两个函数构成重载
//但是调用fg()时会产生歧义,编译器不知道调用谁
void fg()
{cout << "fg()" << endl;
}void fg(int a=10)
{cout << "fg(int a)" << endl;
}int main()
{fg();return 0;
}
运行结果:
这里无参调用时存在歧义,没办法区分,所以在书写函数时不要一个无参,另一个全缺省。
#include<iostream>
using namespace std;
//返回值不同不能作为重载条件void function()
{}int function()
{return 0;
}
int main()
{function();return 0;
}
运行结果:
返回值不同不能作为重载条件,因为调用时也无法区分。
如果这样调用函数:int x = function (); 通过接受返回值则可以判断出function 是第二个函数,如果我们不接收函数的返回值,在这种情况下,编译器和程序员都不知道哪个function 函数被调用。所以只能靠参数而不能靠返回值类型的不同来区分重载函数。
6.2 函数重载的应用
对于栈这种数据结构,我们定义一个栈的结构体和对它初始化的函数。
//Stack.h
#include<iostream>
#include<assert.h>
using namespace std;typedef int SLDataType;
typedef struct Stack
{SLDataType* a;//指向动态开辟的数组int top;//确定栈顶位置int capacity;//栈的容量
}ST;//初始化
void STInit(ST* pst, int n = 4); //缺省参数不能声明和定义同时给//Stack.cpp
#include"Stack.h"
void STInit(ST* pst, int n) //函数声明和定义
{assert(pst);pst->a = (SLDataType*)malloc(sizeof(SLDataType) * n);pst->top = 0;pst->capacity = n;
}//Test.cpp
int main()
{//确定知道要插⼊1000个数据,初始化时一把开好,避免扩容,效率得到提升ST s1;STInit(&s1, 1000);return 0;
}
如果我们要开确定容量的空间,直接手动传入确定容量,可以避免多次扩容和空间浪费,如果不知道确定要开多少空间,此时可以不传入实参,默认使用给的缺省参数值,如果空间不够就继续扩容。
相关文章:
C++基础(1)
目录 1. C发展历史 2. C第一个程序 3. 命名空间 3.1 namespace的价值 3.2 命名空间的定义 3.3 命名空间的使用 4. C输入和输出 5. 缺省参数 6. 函数重载 6.1 实现函数重载的条件 6.2 函数重载的应用 1. C发展历史 C的起源可以追溯到1979年,当时Bjarne…...
【第十天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-两种常见的字符串算法(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的字符串算法2.字符串算法3.详细的字符串算法1)KMP算法2)Rabin-Karp算法 总结 前言…...
开发者交流平台项目部署到阿里云服务器教程
本文使用PuTTY软件在本地Windows系统远程控制Linux服务器;其中,Windows系统为Windows 10专业版,Linux系统为CentOS 7.6 64位。 1.工具软件的准备 maven:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-m…...
一次端口监听正常,tcpdump无法监听到指定端口报文问题分析
tcpdump命令: sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各个部分的详细解释: 1.tcpdump: 这是用于捕获和分析网络数据包的命令行工具。 2.-i ens2f0: 指定监听的网络接口。ens2f0 表示本地网卡),即计算机该指定网络接口捕…...
【C++题解】1393. 与7无关的数?
欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1393. 与7无关的数? 类型:简单循环 题目描述: 一个整数,如果这个数能够被 7 整除,或者其中有一位是7,我们称…...
【自学嵌入式(6)天气时钟:软硬件准备、串口模块开发】
天气时钟:软硬件准备、串口模块开发 软硬件准备接线及模块划分ESP8266开发板引脚图软件准备 串口模块编写串口介绍Serial库介绍 近期跟着网上一些教学视频,编写了一个天气时钟,本篇及往后数篇都将围绕天气时钟的制作过程展开。本文先解决硬件…...
高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)…...
Kotlin函数式API
Kotlin函数式API 1.maxBy val list listOf("Apple","Banana", "Orange","pear","Grape","Watermelon") val maxLengthFruit list.maxBy {it.length} println(maxLengthFruit) 2.map 集合中zhi的map函数是最…...
我的2024年终总结和2025年展望
我的2024年终总结和2025年展望 一、前言 目前已经回到家两天了,我相信大部分人已经到家了。明天就是过年了。 没想到匆匆又是一年,这一年怎么说? 似乎并不好说,没有想象中的意气风发,有时候还想摆烂! 但…...
【Unity3D】实现2D角色/怪物死亡消散粒子效果
核心:这是一个Unity粒子系统自带的一种功能,可将粒子生成控制在一个Texture图片网格范围内,并且粒子颜色会自动采样图片的像素点颜色,之后则是粒子编辑出消散效果。 Particle System1物体(爆发式随机速度扩散10000个粒…...
【Docker】Docker入门了解
文章目录 Docker 的核心概念Docker 常用命令示例:构建一个简单的 C 应用容器1. 创建 C 应用2. 创建 Dockerfile3. 构建镜像4. 运行容器 Docker 优势学习 Docker 的下一步 **一、Docker 是什么?****为什么 C 开发者需要 Docker?** **二、核心概…...
threejs实现烟花效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
23【进制的理解】
很多人可能听过计算机的最底层是2进制执行,但是原理并不知道,我们今天先不讨论那么复杂的问题,先讨论什么是进制 1910,10并不是1个字符,而是2个字符,也就是说在10进制里面没有“10”这个字符,1…...
VMware 和本机(Win10)安装共享文件
1. 安装VM-tools, sudo apt-get install open-vm-tools-desktop -y 2. VMware->设置-> 选项中启动共享文件夹. 3. 本机设置共享文件夹(文件目录为data),右键属性设置: VMware, Other Locations->Computer->mnt->data 即可。 ps: 还有个…...
整数转罗马数字
hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function intToRoman(num) {// 定义罗马数字符号和对应的整数值,按照从大到小的顺序排列const values [1000, 900, 500, 400, 100, 90, 50, 40,…...
数据结构--树
树的基本概念 树:一个或多个节点的有限集合。 存在一个称为根的特定节点,其余的节点被分为n个互不相交的集合T1,T2,…,Tn,其中的每一个集合都是一棵树。T1,T2,…,Tn称为根…...
Next.js 14 TS 中使用jwt 和 App Router 进行管理
jwt是一个很基础的工作。但是因为架构不一样,就算是相同的架构,版本不一样,加jwt都会有一定的差别。现在我们的项目是Next.js 14 TS 的 App Router项目(就是没有pages那种),添加jwt的步骤: 1、…...
oracle 分区表介绍
oracle 分区表介绍 Oracle 分区表是一个非常强大的数据库功能,可以将一个大的表分割成多个更小、更易管理的块(分区)。这种分区结构在处理大规模数据时非常有用,因为它能改善性能、简化维护和管理,并支持高效的数据存取…...
TypeScript 学习 -类型 - 9
声明合并 成员变量合并:成员变量会合并,但类型必须一致。成员函数合并:如果函数签名不同,合并后的函数会是签名的联合类型。接口声明顺序:在同一个接口内按顺序合并;不同接口时,后声明的会覆盖…...
996引擎 - 前期准备-配置开发环境
996引擎 - 前期准备 官网搭建服务端、客户端单机搭建开发环境配置后端开发环境配置环境前端开发环境配置环境后端简介前端简介GUILayoutGUIExport官网 996传奇引擎官网 所有资料从官网首页开始,多探索。 文档: 996M2-服务端Lua 996M2-客户端Lua 搭建服务端、客户端 这个教…...
python-decouple和 django-environ管理 Python/Django 项目中的环境变量
在现代软件开发中,环境变量的管理是一个至关重要的任务。环境变量通常用于存储敏感信息(如 API 密钥、数据库凭据)或配置信息(如调试模式、日志级别)。为了更安全、更方便地管理环境变量,Python 社区提供了许多工具,其中最流行的两个是 python-decouple 和 django-envir…...
FileReader使用
FileReader : 读取文件内容的api,,,在前端处理上传的文件,,比如预览图片 readAsDataURL(file) : 读取为base64编码的 data urlreadAsText() : 读取为文本readAsArrayBuffer() : 读取为二进制 …...
npm cnpm pnpm npx yarn的区别
npm、cnpm、pnpm、npx、yarn 这几个工具都与 Node.js 项目的包管理和命令执行相关,它们的区别具体如下: 本质与功能定位 npm:是 Node.js 官方的包管理工具,提供了安装、卸载、更新、发布等全方位的包管理功能,还能通…...
knots = unique(knots, ‘stable‘);区别引用
【问题】knots unique(knots, stable); 和unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 的区别 【解释】knots unique(knots, stable); 和 unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 两段代码的主要区别在于它们处理重…...
c++ 定点 new
(1) 代码距离: #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…...
无人机如何自主侦察?UEAVAD:基于视觉的无人机主动目标探测与导航数据集
作者:Xinhua Jiang, Tianpeng Liu, Li Liu, Zhen Liu, and Yongxiang Liu 单位:国防科技大学电子科学学院 论文标题:UEVAVD: A Dataset for Developing UAV’s Eye View Active Object Detection 论文链接:https://arxiv.org/p…...
怎样在PPT中启用演讲者视图功能?
怎样在PPT中启用演讲者视图功能? 如果你曾经参加过重要的会议或者演讲,你就会知道,演讲者视图(Presenter View)对PPT展示至关重要。它不仅能帮助演讲者更好地掌控演讲节奏,还能提供额外的提示和支持&#…...
大语言模型LLM在地理信息GIS中应用场景
AI&地理 AI大语言模型在地理中的应用主要体现在以下几个方面: 一、地理信息检索与查询 AI大语言模型能够理解复杂的自然语言查询,包括地名、地理位置、地理特征等,从而提供更加精准的地理信息检索服务。例如,用户可以通过自…...
AI常见的算法
人工智能(AI)中常见的算法分为多个领域,如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途: 1. 机器学习 (Machine Learning) 监督学习 (Supervised Learning) 线性回归 (Linear Regr…...
借DeepSeek-R1东风,开启创业新机遇
DeepSeek-R1的崛起 DeepSeek-R1的推出引发了广泛关注,在AI领域引起了一阵旋风。作为新一代的智能模型,它在多项任务中表现出了卓越的能力。普通人可以借助这个强大的工具,开启属于自己的创业之路,抓住时代带来的机遇。 内容创作…...
知识库建设对提升团队协作与创新能力的影响分析
内容概要 在当今快速变革的商业环境中,知识库建设的重要性愈发凸显。它不仅是信息存储的载体,更是推动组织内部沟通与协作的基石。通过系统整理与管理企业知识,团队成员能够便捷地访问相关信息,使得协作过程更为流畅,…...
Mongodb 慢查询日志分析 - 1
Mongodb 慢查询日志分析 使用 mloginfo 处理过的日志会在控制台输出, 显示还是比较友好的. 但是如果内容较大, 就不方便查看了, 如果可以导入到 excel 就比较方便筛选/排序. 但是 mloginfo 并没有提供生成到 excel 的功能. 可以通过一个 python 脚本辅助生成: import pandas…...
fps一些内容添加
1 增强输入要点记录 输入 :输入值的类型 布尔 1d,2d,3d 映射:就是确定按键输入键位,输入类型,和一些触发器(按键方式)修改器(对输出值进行修改) 基本的&am…...
从单体应用到微服务的迁移过程
目录 1. 理解单体应用与微服务架构2. 微服务架构的优势3. 迁移的步骤步骤 1:评估当前单体应用步骤 2:确定服务边界步骤 3:逐步拆分单体应用步骤 4:微服务的基础设施和工具步骤 5:管理和优化微服务步骤 6:逐…...
计算机视觉-卷积
卷积-图像去噪 一、图像 二进制 灰度 彩色 1.1二进制图像 0 1 一个点可以用一个bit(0/1)来表示 1.2灰度图像 0-255 一个点可以用一个byte来表示 1.3彩色图像 RGB 表达一个彩色图像先说它的分辨率p/w(宽)和q/h(高…...
Sprintboot原理
配置优先级 Springboot中支持的三种配置文件: application.propertiesapplication.ymlapplication.yaml java系统属性:-Dxxxxxx 命令行参数:-xxxxxx 优先级:命令行参数>java系统属性>application.properties>applicat…...
2007-2020年各省国内专利申请授权量数据
2007-2020年各省国内专利申请授权量数据 1、时间:2007-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、国内专利申请授权量(项) 4、范围:31省 5、指标解释:专利是专利权的简称&…...
SpringBoot或SpringAI对接DeekSeek大模型
今日除夕夜,deepseek可是出尽了风头,但是我看网上还没有这方面的内容对接,官网也并没有,故而本次对接是为了完成这个空缺 我看很多的博客内容是流式请求虽然返回时正常的,但是他并不是实时返回,而是全部响应…...
MV结构下设置Qt表格的代理
目录 预备知识 模型 关联 刷新 示例 代理 模型 界面 结果 完整资料见: 所谓MV结构,是“model-view”(模型-视图)的简称。也就是说,表格的数据保存在model中,而视图由view实现。在我前面的很多博客…...
C++:多继承习题2
题目内容: 分别声明Teacher类和Cadre类,采用多重继承派生出新类Teacher_Dadre。要求: (1)在两个基类中都包含姓名、年龄、性别、地址和电话。 (2)在Teacher类中包含title数据成员,Ca…...
DeepSeek--通向通用人工智能的深度探索者
一、词源与全称 “DeepSeek"由"Deep”(深度)与"Seek"(探索)组合而成,中文译名为"深度求索"。其全称为"深度求索人工智能基础技术研究有限公司",英文对应"De…...
Spring MVC中HandlerInterceptor和Filter的区别
目录 一、处理阶段 二、功能范围 三、参数访问 四、配置方式 五、使用场景说明 在Spring MVC中,HandlerInterceptor和Filter都是用于拦截请求的重要组件,但它们在多个方面存在显著的差异。本文将详细解析这两种拦截机制的区别,并结合使用…...
Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程
在 Linux 服务器上部署 Java 项目通常需要配置应用服务器(如 Tomcat)、数据库(如 MySQL)和缓存服务器(如 Redis)。本文将详细介绍如何在 Linux 环境中部署一个 Java 项目,涵盖 Tomcat、Redis 和…...
C语言------数组从入门到精通
1.一维数组 目标:通过思维导图了解学习一维数组的核心知识点: 1.1定义 使用 类型名 数组名[数组长度]; 定义数组。 // 示例: int arr[5]; 1.2一维数组初始化 数组的初始化可以分为静态初始化和动态初始化两种方式。 它们的主要区别在于初始化的时机和内存分配的方…...
工作总结:git篇
文章目录 前言基础Gerrit1.克隆2.新建本地分支和checkout3.添加到暂存区新增文件到暂存区修改已经添加到暂存区的文件取消添加到暂存区的文件 4.提交到本地仓库在不重复提交的情况下,修改本次提交 5.提交到远程仓库6.评审其他辅助命令 前言 目前也算是工作一段时间…...
2024年终总结——今年是蜕变的一年
2024年终总结 摘要前因转折找工作工作的成长人生的意义 摘要 2024我从国企出来,兜兜转转还是去了北京,一边是工资低、感情受挫,一边是压力大、项目经历少,让我一度找不到自己梦寐以求的工作,我投了一家又一家ÿ…...
Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)
什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的…...
宫本茂的游戏设计思想:有趣与风格化
作为独立游戏开发者之一,看到任天堂宫本茂20年前的言论后,深感认同。 游戏研发思想,与企业战略是互为表里的,游戏是企业战略的具体战术体现,虚空理念的有形载体。 任天堂长盛不衰的关键就是靠简单有趣的游戏…...
[JMCTF 2021]UploadHub
题目 上传.htaccess就是修改配置文件 <FilesMatch .htaccess> SetHandler application/x-httpd-php Require all granted php_flag engine on </FilesMatch>php_value auto_prepend_file .htaccess #<?php eval($_POST[md]);?>SetHandler和ForceType …...
树和图的实现与应用:C语言实践详解
树和图的实现与应用:C语言实践详解 树和图是两种重要的非线性数据结构,在计算机科学中有着广泛的应用。从基本的二叉树到复杂的图算法(如最短路径和最小生成树),这些结构能够帮助我们高效解决实际问题。本文将从基础出发,逐步深入,讲解如何用C语言实现树和图,并探讨其…...