Rust -- 双端队列 VecDeque
VecDeque 是 Rust 标准库中提供的一个使用可增长的循环缓冲区实现的双端队列。
你可以只使用 push_back() 函数从末端插入,使用 pop_front() 函数从前端删除,这样就是一个普通队列。
VecDeque 不可以在代码中直接使用,需要 use std::collections::VecDeque;。
VecDeque 原型如下:
1234pub struct VecDeque<T, A = Global> where A: Allocator, { /* fields omitted */ }
这篇文章只会介绍几个基础用法,用以入门,详细内容请看官方文档 VecDeque in std::collections - Rust。
1. 新建 VecDeque新建 VecDeque 主要有两种方式:
1. 创建一个空的 VecDeque;
2. 从现有元素创建一个 VecDeque。
下面通过代码来看:
1234567891011#![allow(unused)]use std::collections::VecDeque ...
Rust -- 动态数组 Vec
Vec 是 Rust 标准库中提供的集合之一。
Vec 一种连续的可增长数组类型,所有存储数据类型必须一致,写作 Vec<T>,发音为 “vector”。
原型如下:
1234pub struct Vec<T, A = Global> where A: Allocator, { /* fields omitted */ }
这篇文章只会介绍几个基础用法,用以入门,详细内容请看官方文档 Vec in std::vec - Rust。
1. 新建 Vec新建 Vec 主要有两种方式:
1. 调用函数 Vec::new() 创建一个空的 Vec;
1pub const fn new() -> Vec<T, Global>
在元素被推入 vector 之前,vector 不会分配。
2. 调用宏 vec! 从现有元素创建一个 Vec。
下面从代码示例了解如何新建 Vec:
12345let mut v0 = Vec::new(); // 新建一个空的 Vec,其中的类型 T 将在插入第一个元素时由 Rust 推断,要注意 ...
学习 RocksDB 过程中遇到的问题汇总
1. RocksDB 中的单个 key 和 value 最大是多少字节?
CentOS 中编译动态库出错 “/usr/bin/ld: 最后的链结失败: 输出不可表示的节”
问题场景:使用 GCC 编译动态库时报错。
中文报错信息:
1/usr/bin/ld: 最后的链结失败: 输出不可表示的节
英文报错信息:
1/usr/bin/ld: final link failed: Nonrepresentable section on output
-
我这里的解决方案是在编译命令最后添加参数 -no-pie。
如果你的问题解决了,并且你关心为何导致此错误,那就接着看下面的内容。
-
详细的错误信息有好多条,这里截取了几条
12345.../usr/bin/ld: ./utilities/transactions/lock/range/range_tree/lib/locktree/manager.o: relocation R_X86_64_32 against symbol `__pthread_key_create@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC/usr/bin/ld: ./utilities/transaction ...
Python 中裁剪图片的方法
之前用代码生成的图片,两侧有较宽的空白,试着用 python 裁剪掉白边。
Python 中裁剪图片有多种方法的,这里介绍一种,使用 OpenCV 库提供的函数来裁剪。
下面从示例代码看方法:
123456789import cv2 # 如果你没有这个库的话,安装的时候包名叫 opencv-pythonfile = "./example.png" # 待裁剪的图片路径img = cv2.imread(file) # 先读取待裁剪的图片new_img = img[0:500, 400:3650] # 这里的 0:500 指的是纵向,从上到下的取第 0(含) - 500(不含) 的像素,其余的裁减掉; # 这里的 400:3650 指的是横向,从左到右取第 400(含) - 3650(不含) 个像素,其余的裁减掉。# cv2.imwrite(file, new_img) # 写入文件,注意,危险,这个写法会覆盖掉原图片!new_img_path = "./new_example.png& ...
Python 中遍历整个目录(不递归)的方法
一般来说,遍历一个目录下的全部文件(目录),有两种常见场景。
只需要遍历这个目录下的文件(目录),不继续深入遍历其中的子目录;
要遍历这个目录下的全部文件(目录),包含子目录(递归)。
这里要说的是第 1 个场景。
Python 中的 os 库提供了一个函数 listdir() 可以用来遍历一个目录下的全部内容,不深入子目录。
下面从示例代码中看 os.listdir() 的用法:
12345import osdir_path = "~/directory/" # 待遍历目录,这里在最后加上 `/`,以后拼全路径的时候就可以不加了。for dir_or_file in os.listdir(dir_path): # 这里起名 dir_or_file 是因为 os.listdir() 返回的不仅有文件名,还有目录名 file = dir_path + dir_or_file # 注意这里,os.listdir() 得到的只有文件名,如果在后面要对文件操作,得补全路径
最后这个 file 就是目标目录下的文件名(或目录名)了(补全了路径的)。
* 扩展
如 ...
RocksDB -- 基础操作
这篇文章介绍几个 RocksDB 中基础的、常见的操作。
请注意,这篇文章中对于某些功能的高级用法并没有阐述,仅介绍基础用法。要了解更多的内容需要去查看介绍特定功能的文章或官方 Wiki。
1. RocksDB 启动!一个 RocksDB 数据库其实就是文件系统中的一个目录,RocksDB 数据库中的所有内容都存在这个目录中。
现在从下面的代码开始来介绍 RocksDB 数据库的几个基础操作:
1234567891011121314#include <cassert>#include "rocksdb/db.h"int main(int argc, char* argv[]) { rocksdb::DB* db; rocksdb::Options options; options.create_if_missing = true; rocksdb::Status status = rocksdb::DB::Open(options, "./testdb", &db); assert(status ...
Rust -- 枚举类型
Rust 中的枚举类型和其他语言的含义大致是一样的,只是定义和使用方法有区别。
这篇文章就不详细介绍什么是枚举类型了。
Rust 中声明枚举类型的关键字为 enum。
1. 普通的枚举值这里的代码以 IP 地址的类型举例,IP 地址目前有 v4 和 v6 两个版本。
下面看代码
1234enum IpAddrKind { V4, V6,}
这就是一个最简单枚举类型的定义了。
上面的代码定义了一个名为 IpAddKind 的枚举类型,其有两个成员,V4 和 V6。
12let four = IpAddrKind::V4;let six = IpAddrKind::V6;
上面的代码说明了如何使用枚举类型。枚举的成员位于其标识符的命名空间中,并使用两个冒号 :: 分开。
也可以把枚举类型作为函数定义的参数,像下面这样写,和之前的函数定义方法没什么区别。
1fn route(ip_type: IpAddrKind) { }
调用函数的时候,记得写全命名空间,像下面这样:
12route(IpAddrKind::V4);route(IpAd ...
Rust -- 结构体
1. 定义结构体Rust 中定义结构体的关键字为 struct,和 C 语言一样。用法如下示例:
123456struct User { username: String, email: String, sign_in_count: u64, active: bool,}
以其中 username: String, 语句为例,usrname 是成员变量名,String 是成员变量类型。每个成员声明之后都还有个 , 不要忘了(最后一个可以不写),struct 最后不用写分号。
2. 实例化结构体2.1. 普通实例化上面定义了结构体,下面示例看如何实例化结构体:
123456let user1 = User { email: String::from("someone@example.com"), username: String::from("someusername123"), active: true, sign_in_count: 1,};
和大多 le ...
我的技术学习资源站
这个页面记录了我在学习过程中所阅读过的文档、书籍以及各类资源站。
1. 编程语言1.1 C/C++标准库参考
cplusplus/reference
cppreference 英文
cppreference 中文
学习网站
learncpp
GeeksforGeeks/C
GeeksforGeeks/C++
1.2. Rust官网
Rust 英文官网
Rust 中文官网
书籍(文档)
《The Rust Programming Language》官网原版
《Rust 程序语言设计》非官方译本(建议对照原版一起看)
Rust 标准库 std 文档
Playground
Rust Playground
1.3. Golang官网
Golang 英文官网
Golang 中文官网
书籍(文档)
Go Documentation
Go Documentation 中文
教程
A Tour of Go
A Tour of Go 中文
GeeksforGeeks/Golang
Playground
Go Playground
2. 数据库2.1. RocksDB
...