- 博客(443)
- 资源 (36)
- 收藏
- 关注
原创 【C++&Rust】对比C++学习和运用Rust语言系列文章
接下来,会出一系列文章,通过比较C++与Rust的异同点,更好的学习r和运用Rust语言!
2021-06-18 09:05:11
940
2
原创 [Rust进阶篇]-Rust之Fn,FnMut,FnOnce运用笔记
1.闭包的含义再弄清楚Fn, FnMut, FnOnce含义之前,需要了解闭包的含义,什么叫闭包闭包:引用了自由变量的特殊函数。注:其中的自由变量来自于函数外的变量,这个变量在闭包中使用就存在3中状态:1. 不可变引用&T1. 可变引用&mut T1. move然而在rust中,函数和闭包都是实现了Fn、FnMut或FnOnce特质(trait)的类型。任何实现了这三种特质其中一种的类型的对象,都是 可调用对象。2. Fn, FnMut, FnOnce 的区别
2021-04-23 14:45:03
2311
原创 [C++&Rust] Rust调用C/C++库笔记-02
1.说明在一个Rust工程中,如果集成C/C++编写的代码,具体步骤如下。2. C++代码编写规范2.1 cpplib.h写法 #ifndef CPPLIB_H #ifdef __cplusplus extern "C" {#endif int max(int a, int b);#ifdef __cplusplus}#endif#endif注意:CPPLIB_H 尽量与文件名保持一致#ifdef __cplusplus 目的是C/C++可以相互调用2.
2021-04-15 11:27:17
2154
原创 [C++&Rust] C++调用rust库笔记-01
1.说明在一个C/C++工程中,如果集成rust编写的库,那么在rust写代码时应该尽量C/C++编程规范保持一致,具体步骤如下。2. rust库的编写规范1.创建一个rust 库工程 $ cargo new --lib mylib2.在配置文件Cargo.tomal中配置参数[package]name = "mylib"version = "0.1.0"authors = ["LiuYuGang <huayue430@126.com>"]edition = "201
2021-04-15 10:18:16
1886
原创 [C++总结记录-14]继承相关问题细节总结
1. 继承的方式及访问权限继承方式public成员protected成员private成员public继承publicprotected不可见protected继承protectedprotected不可见private继承privateprivate不可见2. 继承时的名字遮掩问题父类子类存在相同的成员,那么在子类创建对象时,优先调用本类成员,那么父类的那个同名成员就发生了遮掩。注意:父类继承了子类相关的成员函数,并没有发生重载。
2021-02-05 16:33:04
366
原创 [C++总结记录-13]友元函数的注意点总结
介绍在C++中,一个类中可以有public,protected,private三种属性的成员,这三种属性都可以通过类的成员函数进行访问;类对象质只可以访问到public属性成员;如果外部函数想访问protected,private属性成员,则需要借助友元来达到目的。友元的目的想通过外部函数,访问一个类中的public,protected,private的属性操作,达到跟类成员函数一样的访问权限友元函数是不可以被继承的哪些函数可以作为友元函数(friend)友元函数可以是不属于任
2021-02-05 15:09:37
481
原创 [C++总结记录-12]引用和指针的本质
1.指针的本质指针从本质上就是存放变量地址的变量,可以被修改: 包括变量指向的地址可以被改变,同时该地址存放的值也可以被改变。指针传递参数本质上是值传递的方式,它所传递的是一个地址值,但是地址指向的内容是一样的2. 引用的本质引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的// 这里发生的值的拷贝成为了实参的一个副本void func(int *p1) { // 改变了指针的指向,并不影
2021-02-05 11:06:25
456
原创 [C++总结记录-11]const修饰类中的成员及对象注意事项
1.说明如果在类中,不希望类中的某些属性被修改,可以用const来修饰成员变量和成员函数。2. const修饰的成员变量const修饰的成员变量,初始化时,只能通过构造函数的初始化列表进行初始化。class Cat {public: int m_B; // 占用4个字节对象空间 const int m_A; Cat(int a,int b):m_B(a),m_A(b){//const类型只能通过初始化列表来初始化 //this->m_A = 200; //错误,const
2021-02-04 15:13:40
377
原创 [C++总结记录-10]对象内存占用情况及this指针注意点
1. 对象的内存占用1)空类占用一个字节空间大小class Cat {};Cat c1;cout << sizeof(c1) << endl; //1个字节2) 静态成员变量、静态成员函数不占对象空间class Cat {public: static int a;};int Cat::a = 20;int main() { Cat c1; cout << sizeof(c1) << endl;//1个字节 retur
2021-02-04 11:25:49
359
1
原创 [C++总结记录-09]静态成员变量与静态成员函数的细节点
1.静态成员变量- 所有对象共享同一份数据- 在编译阶段分配内存- 类内声明,类外初始化2.静态成员变量特点- 在编译阶段分配内存- 类内声明,类外初始化- 所有对象共享同一份数据3.静态成员函数- 所有对象共享同一个函数- 静态成员函数只能访问静态成员变量4.静态成员函数的特点- 程序共享一个函数- 静态成员函数只能访问静态成员变量5.具体代码实现class Cat {private: string c_name; static int age; //静态成员变
2021-02-03 16:38:38
296
原创 [C++总结记录-08]类对象作为另一类成员
1.C++ 类的成员可以成为另外一个类的对象,称之为对象成员class Dog {public: string d_name;public: Dog(string d_name) :d_name(d_name) { cout << "对象成员构造函数" << endl; } ~Dog() { cout << "对象成员析构函数" << endl; }};class Cat {private: string c_name;
2021-02-03 16:24:43
929
原创 [C++总结记录-07]构造函数初始化注意点
1.在构造函数中对属性一一赋值class Cat{public: int age; string name; //对属性一一赋值 Cat(int age,string name){ this->name = name; this->age = age; }}2.在构造函数采用初始化列表方式对属性进行赋值a. 初始化列表方式初始化属性,函数体可以为空class Cat {private: string name; int age;public
2021-02-03 16:00:33
279
原创 [C++总结记录-06]构造函数与析构函数调用时机
1.拷贝构造函数的调用时机class Student {public: Student();// 无参构造 Student(int age); //有参构造函数 Student(Student &stu);// 拷贝构造 ~Student(); void show();private: int m_age;};// 有参构造函数Student::Student(int age) { this->m_age = age; cout << "有参构造" &
2021-02-03 15:02:49
326
原创 [C++总结记录-05]构造函数与析构函数注意点
1.构造函数1) 构造函数的作用创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用2) 构造函数的语法a.没有返回值也不写voidb.函数名称与类名相同c.构造函数可以有参数,因此可以发生重载d.程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次3)构造函数分类a.无参构造b. 有参构造c. 拷贝构造class Student {public: Student();// 无参构造 Student(int age)
2021-02-03 14:12:36
280
原创 [C++总结记录-04]struct与class注意点
1.结构体定义struct 结构体名 数组名[元素个数] = { {} , {} , ... {} } struct student { string name; //默认是公共权限 }// 使用1student stu;stu.name = "詹丹"// 使用1student stu2 = {"占山"}2.class定义语法: class 类名{ 成员属性; 成员函数 }// 简单的类class Student { string name;//默认是私有权限
2021-02-03 10:37:22
347
转载 [C++总结记录-03]函数相关细节注意点
1.函数默认参数(默认值)返回值 函数名(参数=默认值){} void test(int a,int b, int c=100){ cout << "函数默认值"; }// 调用test(12,14);//正确,不传,默认采用默认值test(12,46,890);//正确,真实值890会覆盖默认值100a. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值 void test(int a,int b = 90, int c=1
2021-02-03 09:47:54
283
原创 [C++总结记录-02]引用的实质总结
1.引用的实质给变量起别名2. 引用语法数据类型 &别名 = 原名int a = 12;int &b = a;b = 1000;cout << a == b <<endl;// true a=b = 10003.注意事项a. 引用必须初始化int a;int &b = a;//错误,a为初始化b. 旦引用被初始化,就不能改变引用的关系,即不能再指向其他对象(指针则可以随时改变所指的对象)c. 不能有NULL 引用,引
2021-02-02 16:49:12
315
原创 [C++总结记录-01]程序内存的划分
1.内存的划分代码区存放的是程序代码(CPU执行的指令),只读的常量区存放常量(运行期间是不可修改),例如:10,“hello world”,数组的名字int c = 100; // c存储在栈区;100存储在常亮去const int a = 200 // string b = "hello world"静态区(全局区)存储的是静态变量或者全局变量,一旦静态区内存被分配,直到程序结束才会被释放,static标注的变量;extern修饰的全局变量//全局变量i
2021-02-02 16:13:37
331
1
原创 [Rust进阶篇]-Rust之类型之间转换常用方法总结
1. 数字类型之间转换类型(X)i32i64u32i32-X as i64X as u32i64X as i32-X as u32…………let a = 23i32;let a1 = a as i64;let a1 = a as u32 2. 数字类型转字符串类型(X)i32u32f64Stringa.parse::().unwrap()a.parse::().unwrap()a.parse::().
2021-01-26 15:33:16
2120
原创 [Rust进阶篇]-Rust之&str与String比较及转换方法使用总结
1.&str与String区别1) &str类型是Rust语言的原生类型,它指向分配在某处的String的一个*固定*容量,这里又分为2类:a 如果&str指向的是String类型,由于String创建于堆区,则&str指向堆。b 如果&str指向的是字面量字符串(&str),则&str指向的是静态区内存。2) Rust中,字符串(&str和String)Unicode 标量值的序列编码为 utf - 8 字节的流3) &
2021-01-26 10:35:25
6034
原创 [Rust进阶篇]-Rust之如何组织项目目录
1. 含义Packages: Cargo提供的让我们创建, 测试和分享Crates的工具.Crates: 提供类库或可执行文件的模块树Modules and use: 管理和组织路径, 及其作用域和访问权限Paths: 如结构体(structs), 函数(function), 或模块(module)等事物的命名方式2. 包与单元包关系包(Packages)和箱(Crates)包(Package)通过Cargo创建. 每一个包(Package)都有一个Cargo.toml文件. 包(Pac
2021-01-19 19:10:49
2697
原创 [Rust进阶篇]-Rust之单元测试使用总结
1. 单元测试测试(test)是这样一种 Rust 函数:它保证其他部分的代码按照所希望的行为正常 运行。测试函数的函数体通常会进行一些配置,运行我们想要测试的代码,然后 断言(assert)结果是不是我们所期望的。大多数单元测试都会被放到一个叫 tests 的、带有 #[cfg(test)] 属性 的模块中,测试函数要加上 #[test] 属性。fn sayHi(a:i32) -> i32{ println!("say hi !"); a}fn say_hello(
2021-01-18 16:41:41
1558
原创 「LeetCode笔记」100. 是否为相同的树-C++与Rust实现
* Input: 1 1 * / \ / \ * 2 3 2 3 * * [1,2,3], [1,2,3] * * Output: true * * * Example 2: * * * Input: 1 1 * / \ * 2 2 * * [1.
2021-01-18 15:16:16
250
原创 [Rust进阶篇]-Rust之字符串,字符处理
1. 字符串转字符数组let s = String::from("11100");let mut a:Vec<char> = s.chars().collect();println!("{:?}",a); //['1', '1', '1', '0', '0']2. 字符转数字let a = String::from("11100");let b = String::from("11100");let mut a: Vec<char> = a.chars().coll
2021-01-13 11:25:53
3374
原创 [Rust进阶篇]-Rust之&和&mut;Cell和Cell的用法
1.Rust提供了两种引用类型&:共享引用;&mut:可变引用原则同一个作用域下,对于资源对象 A 的引用只允许两种情况, 要么是同时存在 n 个共享引用 &,要么只有一个可变引用 &mut, 共享引用不允许对其作任何修改,可变引用可以修改。1.共享引用& 不允许对值进行修改 let a = 12; let c = &a; a = 13;//报错,不可修改2.可变引用&mut 则可以对值进行修改 let m.
2021-01-13 11:23:22
1242
原创 「LeetCode笔记」88. 合并两个有序数组-C++与Rust实现
给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1有足够的空间(空间大小等于m + n)来保存 nums2 中的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1 = [1], ...
2021-01-12 19:28:15
455
原创 「LeetCode笔记」83. 删除排序链表中的重复元素-C++与Rust实现
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3C++实现class Solution {public: ListNode* deleteDuplicates(ListNode* head) { ListNode * cur = head; while (cur && ...
2021-01-11 16:15:57
394
原创 「LeetCode笔记」70. 爬楼梯-C++与Rust实现
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶C++ 实现class Solution {public...
2021-01-08 14:53:08
669
原创 「LeetCode笔记」69.x 的平方根-C++与Rust实现
实现int sqrt(int x)函数。计算并返回x的平方根,其中x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去C++ 实现class Solution {public: int mySqrt(int x) { long a=1; whil...
2021-01-08 09:54:03
503
原创 「LeetCode笔记」67.二进制求和-C++与Rust实现
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。C++实现class Soluti...
2021-01-07 14:20:56
374
原创 【rust笔记】rust之Trait的使用
1. Trait 定义Trait 定义了一个抽象接口,类似其他语言中的interface,这个抽象接口可以被类型继承。2.Trait的组成部分functions(方法)types(类型)constants(常量)所有的Trait都定义了一个隐含类型Self,其指向实现该Trait的类型。Traits可能也包含额外的类型参数,这些类型参数(包括Self),与往常一样可能受到其他Traits等的约束。类型需要通过独立的implementations去实现不同的Trait。2.Self与sel
2021-01-06 16:23:56
1430
2
原创 「LeetCode笔记」8.字符串转换整数 (atoi)-C++与Rust实现
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数...
2021-01-06 14:45:54
387
原创 「LeetCode笔记」58. 最后一个单词的长度-C++与Rust实现
给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: "Hello World"输出: 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/length-of-last-word著作权归领扣网络所有。商业转载请联系官...
2021-01-06 14:43:16
237
原创 「LeetCode笔记」66.加一-C++与Rust实现
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]C++实现...
2021-01-06 14:40:58
265
原创 「LeetCode笔记」Z字形变换-C++与Rust实现
题目-Z字形变换E T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入: s = "LEETCODEISHIRING", numRows = 3输出: "LCIRETOESIIGEDHN"示例 2:输入: s = "LEETCODEISHIRIN
2020-12-17 08:45:53
392
原创 MySQL和PGSQL的特点对比
序号 特性 MySQL PostgreSQL 1 实例 一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例 一个实例可以管理一个或多个数据库,这些数据库组成一个集群 2 CPU限制 理论最高支持128核CPU、超过128核用不上 没有CPU核数限制、多多益善 3 数据缓冲区 通过innodb_buffer_pool_size配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓..
2020-12-15 10:51:14
1504
原创 「Rust项目」Rust之前端框架总结
1、前言研究Rust很久了,开始给大家上项目,上项目之前先介绍下Rust常用的web框架及各个框架的优缺点。总之项目选型很重要。python流行常用框架有:Django(较重)、Flask(轻量级)、FastAPI(性能最好)Go语言常用框架:beego(较重)、Gin(轻量级)Rust语言框架:Rocket、Actix-web,Hyper, Yew、Warp、Gotham,Rouille,SHIO,Rustful等用的最多的主要Rocket、Actix-web2、Rocke..
2020-12-01 14:32:17
3801
原创 「Rust笔记」Rust之JSON数据处理
JSON 处理JSON 是一种无处不在的开放标准格式, 它使用人类可读的文本来传输由键值对组成的数据对象.这里借助一下serde_json这个库.[dependencies]url = "2.2.0"serde = "1.0.117"serde_derive = "1.0.117"serde_json = "1.0.59"假设有如下文件:{ "name": "John Doe", "age": 43, "address": { "s..
2020-12-01 14:30:59
4653
2
原创 「Rust笔记」Rust之Drop介绍
现在我们讨论了 trait,让我们看看一个由 Rust 标准库提供的特殊 trait,Drop。Droptrait 提供了一个当一个值离开作用域后运行一些代码的方法。例如:struct HasDrop;impl Drop for HasDrop { fn drop(&mut self) { println!("Dropping!"); }}fn main() { let x = HasDrop; // Do stuff.}...
2020-12-01 14:30:08
2355
原创 「Rust笔记」Rust具有Copy特性的类型
所有权规则Rust 中的每一个值都有一个被称为其所有者(owner)的变量。 值在任一时刻有且只有一个所有者。 当所有者(变量)离开作用域,这个值将被丢弃。Copy的类型:所有整数类型,比如u32。 布尔类型,bool,它的值是true和false。 所有浮点数类型,比如f64。 字符类型,char。 元组,当且仅当其包含的类型也都是Copy的时候。比如,(i32, i32)是Copy的,但(i32, String)就不是。具有Cop...
2020-12-01 14:29:32
1385
iOS开的常见8中传值(初始化传值,代理传值,属性传值,代理传值,block传值,通知传值,NSuserDefault传值,AppDelegate传值)
2016-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人