C/C++、Java、Python的比较及学习(3)
- 函数间的值传递与地址传递
值传递方式:指主调函数把实参的值赋给形参。
在这种传递方式下,主调函数中的实参地址与被调函数中的形参地址是相互独立的。
函数被调用时,系统为形参变量分配内存单元,并将实参的值存入到对应形参的内存单元中。
被调函数在执行中使用的是形参,形参的变化和实参无关,被调函数return时,系统自动收回为形参分配的内存空间。
#include<stdio.h>void main(){void s(int);int n;printf("input number\n");scanf("%d",&n);//输入10s(n);//调用函数输出55printf("n=%d\n",n);//主函数依旧输出10
}void s(int n){int i;for(i=n-1;i>=1;i--)n+=i;printf("ns=%d\n",n);
}
地址传递方式:指将存放实参的地址传递给形参。
在这种传递方式下,被调用函数在执行中当需要存取形参值时,是通过形参来找到实参所在地址后,直接存取实参地址中的数据。在这种传递方式下,如果被调函数改变了形参的值,也就改变了主调函数中实参的值。被调函数执行完返回主调函数时,被调函数形参的新值也就通过实参的地址传回主调函数。
此外,无论是值传递还是地址传递都只能实现数据的单向传递,在调用时只能将实参值传递给形参。
#include<stdio.h>void main(){void s(int*);int n;printf("input number\n");scanf("%d",&n);//输入10s(&n);//调用函数输出10printf("n=%d\n",n);//主函数依旧输出10
}void s(int *n){int *p=n,ns=0;for(;*p>=1;p--)ns+=*p;printf("ns=%d\n",ns);
}
- 局部变量与全局变量
局部变量:也称为内部变量,是在函数内定义的变量。作用域仅限于函数内。
注意点:形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰。
在复合语句里定义的局部变量作用域只在复合语句范围内。
全局变量:也称为外部变量是在函数外部定义的变量。作用域从定义位置开始到本程序文件的末尾。
注意点:同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内全局变量被屏蔽。
使用全局变量可实现各函数之间的数据传递,但并不提倡,会降低程序的可读性并且浪费存储空间。
静态局部变量和静态全局变量的区别:
静态局部变量:它的数据存储在静态存储区,它与局部变量的区别在于函数退出时变量始终存在,但不能被其他函数使用,当再次进入该函数时,将保持存上次的结果,其他与局部变量一样。
静态全局变量:只在定义它的源文件中可见,而在其他源文件中不可见的变量,它与全局变量的区别是全局变量可以再说明为外部变量(extern),被其他源文件使用,而静态全局变量却不能再被说明为外部的,只能被所在的源文件使用。 - 函数的递归调用:在一个函数体内直接或间接调用它自身的操作。
为防止递归调用无终止的进行,必须在函数体内有终止递归的手段。采用办法是加条件判断,满足某种条件后就不再做递归调用,然后逐层返回。
区别于函数的嵌套调用:其指允许在一个函数的定义中出现对另一个函数的调用。
用递归法计算n!:
#include<stdio.h>long fun(int n){long f;if(n==0||n==1)f = 1;elsef=fun(n-1)*n;return f;
}void main(){int n;long y;printf("input a number:\n");scanf("%d",&n);y = fun(n);printf("%d!=%ld",n,y);
}
import java.util.*;
public class one {public static long fun(int n){long f;if(n==0||n==1)f = 1;elsef=fun(n-1)*n;return f;}public static void main(String[] args){int n;long y;System.out.println("input a number:");Scanner sc=new Scanner(System.in);n=sc.nextInt();y = fun(n);System.out.println(n+"!="+y);}
}
def func(count):if count == 1:return 1else:return func(count-1)*count
num = int(input("请输入一个数:"))
print("%d的阶乘为%d"%(num,func(num)))
python里面的%()表示字符串格式化操作,常用的操作有%s %d %r等。是指将其他变量置入字符串特定位置以生成新字符串的操作,比如:
n = "Aki"
"My name is %s" % n
这段代码首先定义了一个名为n的变量,内容为Aki。然后下方的字符串中有一个%s,他的含义是“这里将被替换成一个新的字符串”,用作替换的内容放在字符串后面的%后面,就是那个n。所以最终这个字符串会变成My name is Aki。字符串中的%后面会附带一个字母,代表着用来替换的变量的类型,比如说%d代表着你将替换到此处的变量是一个整数,而%s代表着一个字符串。
另外,这种操作可以同时将多个变量放进字符串,只需要用括号把变量们括起来。
>>> "www.%s.com"%"zhihu" #字符串
'www.zhihu.com'>>> "%dkm"%1990 #整数型
'1990km'>>> "%s %d %f"%("abc",123,3.21) #多个值
'abc 123 3.210000'
说明如下:
%[(name)][flags][width].[precision]typecode
(name) 为命名
flags 可以有+,-,' '或0。
+表示右对齐。-表示左对齐。0表示使用0填充。
' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。
width 表示显示宽度
precision 表示小数点后精度
typecode 为类型码
%s 字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
%% 字符"%"
>>> print("%6.3f" % 2.3)2.300
# 第一个"%"后面的内容为显示的格式说明,6为显示宽度,3为小数点位数,f为浮点数类型
# 第二个"%"后面为显示的内容来源,输出结果右对齐,2.300长度为5,故前面有一空格
>>> print("%+10x" % 10)+a
# x为表示16进制,显示宽度为10,前面有8个空格
>>>print("%-5x" % -10)
-a
# "%-5x" 负号为左对齐,显示宽度为5,故-a后面有3个空格
>>>pi=3.1415
>>>print ("pi的值是%s"%pi)
pi的值是3.1415
>>>print ("pi的值是%.8f"%pi)
pi的值是3.14150000
- Hanoi塔问题
#include<stdio.h>void move(int n,char x,char y,char z){if(n==1)printf("%c-->%c\n",x,z);else{move(n-1,x,z,y);printf("%c-->%c\n",x,z);move(n-1,y,x,z);}
}void main(){int h;printf("input a number:");scanf("%d",&h);printf("the step to moving %2d diskes:\n",h);move(h,'a','b','c');
}
import java.util.*;
public class one {public static void move(int n,char x,char y,char z){if(n==1)System.out.println(x+"-->"+z);else{move(n-1,x,z,y);System.out.println(x+"-->"+z);move(n-1,y,x,z);}}public static void main(String[] args){int h;System.out.println("input a number:");Scanner sc=new Scanner(System.in);h=sc.nextInt();System.out.println("the step to moving "+h+" diskes:3");move(h,'a','b','c');}
}
def move(n,x,y,z):if n == 1:print(x,"-->",z)else:move(n-1,x,z,y)print(x,"-->",z)move(n - 1, y, x, z)
h=int(input("请输入一个数:"))
print("the step to moving %2d diskes:\n",h)
move(h,'a','b','c')
- 输入n值,输出高度为n的等边三角形。(递归实现)
#include<stdio.h>void prt(char c,int n){if(n>0){printf("%c",c);prt(c,n-1);}
}
void main(){int i,n;scanf("%d",&n);for(i=1;i<=n;i++){prt(' ',n-i);prt('*',2*i-1);printf("\n");}
}
- 斐波那契序列(Fibonacci数列):
斐波那契数列(Fibonacci sequence),又称“黄金分割”数列。
比如这样一个数列:1,1,2,3,5,8,13,21,34,55,89… …数列从第3项开始,每一项都等于前两项之和。在C语言中,我们可以用多种方式来实现斐波那契数列。这里针对以下三种方式来体现每种方法的效率:1)递归,2)非递归,3)数组。
- 递归。该递归属于多分支递归,会造成栈溢出。
//递归#include<stdio.h>int Fib(int n){if(n==1||n==2)//数列前两项{return 1;}else//从第三项开始{return Fib(n - 1) + Fib(n - 2);}return 0;}int main(){int n = 0;scanf("%d", &n);//输入一个数int ret = Fib(n);//计算斐波那契数列printf("%d\n", ret);//打印结果return 0;}
2)非递归。非递归较递归效率更高,避免了重复计算的时间和空间。
//非递归
#include<stdio.h>int Fib(int n)
{int num1 = 1;int num2 = 1;int tmp = 1;while (n>2){tmp = num1 + num2;num1 = num2;num2 = tmp;n--;}return tmp;
}
int main()
{int n = 0;int ret = 0;scanf("%d", &n);ret = Fib(n);printf("该数的斐波那契数列为%d", ret);return 0;
}
3)数组。
//数组法
#include<stdio.h>int Fib(int n)
{int i;int arr[100] = {0,1,1};for (i = 2; i <= n; i++)//从第一项开始{arr[i] = arr[i - 1] + arr[i - 2]; }return arr[n];
}
int main()
{int n;scanf("%d", &n);printf("%d", Fib(n));return 0;
}
import java.util.*;
public class one {public static int Fib(int n){if (n == 1|| n==2)return 1;elsereturn Fib(n-1)+Fib(n-2);}public static void main(String[] args){int n,ret;System.out.println("input a number:");Scanner sc=new Scanner(System.in);n=sc.nextInt();ret=Fib(n);System.out.println(ret);}
}
def Fib(n):if n == 1 or n==2:return 1else:return Fib(n-1)+Fib(n-2)return 0
n = int(input("请输入一个数:"))
ret = Fib(n)
print(ret)
- 静态存储变量和动态存储变量:
静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。
动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。所以我们可知,静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失的。
1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储变量。
2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。
3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。
通常把由于变量存储方式不同而产生的特性称为变量的生存期。
4)静态存储只会初始化一次。
区分:定义或者声明变量时,没有static修饰符的就是动态变量,有static修饰符的就是静态变量。 - 输入以秒为单位的一个时间值,将其转化成“时:分:秒”的形式输出。将转换工作定义成函数。
#include<stdio.h>void fun(int sec){int h,m,s;h = sec/3600;m = sec/60-60*h;s = sec-h*3600-m*60;printf("%d:%d:%d\n",h,m,s);
}
void main(){int sec;scanf("%d",&sec);fun(sec);
}
- 编写一个递归函数将一个整数n转换成相应的字符串。
#include<stdio.h>void fun(int n){int i,j;i = n%10;j = n/10;if(j) fun(j);printf("%c",i+'0');
}
void main(){int n;printf("Please input an integer: ");scanf("%d",&n);printf("Switch to string: ");fun(n);printf("\n");
}
c 语言 int 转字符串,C++ 字符串string和整数int的互相转化操作:
一、string转int的方式
1、采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了。
2、采用标准库中atoi函数。
string s = "12";
int a = atoi(s.c_str());
对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等。
3、采用sstream头文件中定义的字符串流对象来实现转换。
istringstream is("12"); //构造输入字符串流,流的内容初始化为“12”的字符串
int i;
is >> i; //从is流中读入一个int整数存入i中
二、int转string的方式
1、采用标准库中的to_string函数。
int i = 12;
cout << std::to_string(i) << endl;
不需要包含任何头文件,应该是在utility中,但无需包含,直接使用,还定义任何其他内置类型转为string的重载函数,很方便。
2、采用sstream中定义的字符串流对象来实现。
ostringstream os; //构造一个输出字符串流,流内容为空
int i = 12;
os << i; //向输出字符串流中输出int整数i的内容
cout << os.str() << endl; //利用字符串流的str函数获取流中的内容
字符串流对象的str函数对于istringstream和ostringstream都适用,都可以获取流中的内容。
补充知识:C++ 将整数、浮点数转为字符串
前言:
用 sprintf可以把整数、浮点数转为字符串。
1、整数
#include<iostream>
#include<stdio.h>
using namespace std;void main() {int n=12345;//待转整数char s[10];//转换后的字符串sprintf(s,"%d", n);cout<<s<<endl;
}
2、浮点数
#include<iostream>
#include<stdio.h>
using namespace std;void main() {float n = 12345.67;//待转整数char s[10];//转换后的字符串sprintf(s,"%.2f", n);cout<<s<<endl;
}
import java.util.*;
public class one {public static void main(String args[]) {int a = 10;int b = 20;//variable to store resultString result = null;//converting integer to stringresult = Integer.toString(a);//句法:Integer.toString(int);System.out.println("result (value of a as string) = " + result);result = Integer.toString(b);System.out.println("result (value of b as string) = " + result);}
}
intVal = 12345
result = str(intVal)
print(type(intVal))
print(type(result))
print(intVal,result)
- 预处理命令并不是C语言本身的组成部分。
- 带参数的宏与函数有什么区别?
(1)宏展开仅仅是字符串的替换,不会对表达式进行计算;
(2)宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存,而函数是一段可以重复使用的代码,会被编译,会给它分配内存,每次调用函数,就是执行这块内存中的代码。
#include<stdio.h>
#define MAX(a,b,c) (a>b?a:b)>c?(a>b?a:b):c
float max(float a,float b,float c){if(a<b) a = b;if(a<c) a = c;return a;
}
int main(){float x,y,z;scanf("%f %f %f",&x,&y,&z);printf("%.3f\n",MAX(x,y,z));printf("%.3f\n",max(x,y,z));return 0;
}
-
const与define的区别:
1、define是预编译指令,const是普通变量的定义,define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。
2、const定义的是变量,而define定义的是常量。define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。可以说,常变量是有名字的不变量,而常量是没有名字的。有名字就便于在程序中被引用,所以从使用的角度看,除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便。所以编程时在使用const和define都可以的情况下尽量使用常变量来取代宏。
3、const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”。 -
typedefine 和 define 的区别?
检查不同:#define仅仅是在编译前期的预处理过程中进行源代码中的字符串替换,不参与之后的翻译期语法检查。而typedef定义的类型别名会被静态类型系统检查,如果发现了用未定义的类型来定义新的类型,会明确地产生编译错误。
用法不同:typedef 用来定义一种数据类型的别名,增强程序的可读性。define 主要用来定义常量,以及书写复杂使用频繁的宏。
执行时间不同:typedef 是编译过程的一部分,有类型检查的功能。define 是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。
作用域不同:typedef 有作用域限定。define 不受作用域约束只要是在define 声明后的引用都是正确的。
对指针的操作不同:typedef 和define 定义的指针时有很大的区别。
注意:typedef 定义是语句,因为句尾要加上分号。而define 不是语句,千万不能在句尾加分号。 -
函数的原型声明一般在函数的调用之前,而函数的定义可以在函数调用之后。
-
函数的参数包括形式参数和实际参数,形式参数只能是变量,而实际参数可以是变量、常量和表达式。函数在调用时,实际参数的个数、类型和顺序参数保持一致。
-
函数的返回值大小由return后面的表达式的值决定,返回值的类型由函数定义时的类型决定。
-
当函数调用时,系统给形式参数分配存储空间,并把实际参数的值复制给形式参数,调用结束后形式参数所占用的内存被释放。
-
在C语言中,不能在一个函数内定义另外的函数。
-
C语言中的宏定义,其本质就是用一个不带引号的字符串替换宏名。
相关文章:
C/C++、Java、Python的比较及学习(3)
函数间的值传递与地址传递 值传递方式:指主调函数把实参的值赋给形参。 在这种传递方式下,主调函数中的实参地址与被调函数中的形参地址是相互独立的。 函数被调用时,系统为形参变量分配内存单元,并将实参的值存入到对应形参的内存…...
智慧校园建设方案
第一章、 智慧教学 6.1. 校本资源库 提供校本资源管理功能,实现学校内的教学资源的共建共享,促进教师之间的交流学习,提升学校的整体教学水平。在本系统中学校可以统一采购资源接入到校本资源库中供教师下载使用,教师也可以将…...
ARM uboot 源码分析5 -启动第二阶段
一、start_armboot 解析6 1、console_init_f (1) console_init_f 是 console(控制台)的第一阶段初始化。_f 表示是第一阶段初始化,_r 表示第二阶段初始化。有时候初始化函数不能一次一起完成,中间必须要夹杂一些代码,…...
【ip neigh】管理IP邻居( 添加ARP\NDP静态记录、删除记录、查看记录)
一、邻居管理存在状态 1、NUD_NONE: 初始状态。当一个新的路由缓存条目被创建时,arp_bind_neighbour()函数被调用.如果找不到相匹配的ARP缓存条目, neigh_alloc()将创建一个新的ARP缓存条目并设置状态为NUD_NONE. 2、NUD_INCOMPLETE:未完成状…...
Java程序员线上排查问题神器-Arthas
文章目录前言一、Arthas是什么?二、快速入门1.下载2.如何运行三、常用命令1.dashboard2.trace总结前言 最近公司项目版本迭代升级,在开发新需求导致没什么时间写博客。 在开发需求的过程中,我写了一个接口,去批量调内部已经写好…...
上市公司企业持续创新能力、创新可持续性(原始数据+计算代码+计算结果)(2008-2021年)
数据来源:自主计算 时间跨度:2008-2021年 区域范围:沪深A股上市公司 指标说明: 参考何郁冰(2017)[1]的做法,将持续创新作为独立研究变量,同时采用创新投入指标(研发经费) 和创新…...
华为OD机试 - 考古学家(JS)
考古学家 题目 有一个考古学家发现一个石碑 但是很可惜 发现时其已经断成多段 原地发现N个断口整齐的石碑碎片 为了破解石碑内容 考古学家希望有程序能帮忙计算复原后的石碑文字组合数 你能帮忙吗 备注: 如果存在石碑碎片内容完全相同,则由于碎片间的顺序不影响复原后的碑…...
Leetcode.2100 适合打劫银行的日子
题目链接 Leetcode.2100 适合打劫银行的日子 Rating : 1702 题目描述 你和一群强盗准备打劫银行。给你一个下标从 0开始的整数数组 security,其中 security[i]是第 i天执勤警卫的数量。日子从 0开始编号。同时给你一个整数 time。 如果第 i天满足以下所…...
linux ubuntu查日志信息以及错误排查
目录 一、linux的日志文件 1、常用日志文件 2、其他日志文件 二、历史日志的查看 1、查看Logrotate的配置信息 2、查看日志配置 一、linux的日志文件 Linux系统中最有趣的(可能也是最重要的)目录之一是/var/log。根据文件系统层次结构标准,在系统中运行的大多数…...
DOS经典软件,落下帷幕,新型国产平台,蓬勃发展
提起DOS时代,总让人难以忘怀,陷入深深回忆中,风靡一时的许多软件,如今早已不在,这几款被称为DOS必装的软件,更是让人惋惜。 你还记得这图吗?堪称DOS系统最经典的软盘复制与映像生成软件…...
MongoDB数据存储格式
前言 之前分享了MongoDB的基本命名和视图等信息,本文分享一下MongoDB的数据存储类型,使用方式。基础的MongoDB信息就学习完啦,之后会继续分享MongoDB进阶的一些东西。 MongoDB数据存储格式前言1 文件结构1.2 字段名称2 点符号2.2 嵌入式文件…...
ARC126D Pure Straight
ARC126D Pure Straight 题目大意 给一个长度为nnn的整数序列A(a1,a2,…,an)A(a_1,a_2,\dots,a_n)A(a1,a2,…,an),其中ai∈[1,k]a_i\in [1,k]ai∈[1,k]。 你可以做如下操作任意次: 交换相邻两个元素 求最小的操作次数,使得序列AA…...
基于RK3588的嵌入式linux系统开发(四)——uboot镜像下载(基于RKDevTool工具)
官方提供的SDK中包含RKDevTool工具(RKDevTool_Release_v2.92)和相应的驱动(DriverAssitant_v5.1.1)。本节主要介绍在windows操作系统环境下利用RKDevTool下载以上生成的uboot镜像和bootloader镜像。注意:本节使用的板卡…...
设计模式之策略模式与责任链模式详解和应用
目录1.策略模式1.1 目标1.2.内容定位1.3.定义1.4.应用场景1.5.促销优惠业务场景1.6 用策略模式实现选择支付方式的业务场景1.7 策略模式在框架源码中的体现1.8 策略模式的优缺点2 责任链模式2.1 责任链楼式的应用场景2.2 利用责任链模式进行数据校验拦截2.3 责任链模式和建造者…...
广度优先搜索(BFS)-蓝桥杯
一、BFS搜索的原理BFS搜索的原理:“逐层扩散”,从起点出发,按层次从近到远,逐层先后搜索。编码:用队列实现。应用:BFS一般用于求最短路径问题,BFS的特点是逐层搜索,先搜到的层离起点…...
Java Type类
文章目录Type简介Type分类1. 原始类型(Class)2. 参数化类型(ParameterizedType)3. 类型变量(TypeVariable)4. 通配符类型(WildcardType)5. 泛型数组类型(GenericArrayType)Type简介 Type是Java编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型…...
Springboot扩展点之CommandLineRunner和ApplicationRunner
Springboot扩展点系列:Springboot扩展点之ApplicationContextInitializerSpringboot扩展点之BeanFactoryPostProcessorSpringboot扩展点之BeanDefinitionRegistryPostProcessorSpringboot扩展点之BeanPostProcessorSpringboot扩展点之InstantiationAwareBeanPostPro…...
ngixn 常用配置之文件类型与自定义 log
大家好,我是 17 。 总结了一些 nginx 的常用配置。从入口文件开始,今天讲一下文件类型和自定义log 为了讲述方便,环境为 CentOS 7, nginx 版本 1.21。 配置文件入口 /etc/nginx/nginx.conf这是入口文件,这个文件里…...
【100个 Unity实用技能】 | Unity 通过自定义菜单将资源导出
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案ÿ…...
0.3调试opencv源码的两种方式
调试opencv源码的两种方式 上两篇我们分别讲了如何配置opencv环境,以及如何编译opencv源码方便我们阅读。但我们还是无法调试我们的代码,无法以我们的程序作为入口来一步一步单点调试看opencv是如何执行的。 【opencv源码解析0.1】VS如何优雅的配置ope…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
