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

Rust的Cargo用法详解 - 详解

Cargo 是 Rust 的官方包管理器和构建工具,集成了依赖管理、项目构建、测试、文档生成、发布等功能。以下从核心功能出发,结合具体示例和底层逻辑,详细说明其用法。
在这里插入图片描述

一、Cargo 核心概念

在开始前,先明确几个关键概念:

  • Cargo.toml:项目的“清单文件”,定义项目元数据(名称、版本、作者)、依赖、构建脚本(build.rs)、特性(features)等。
  • Cargo.lock:自动生成的“锁文件”,记录所有依赖的精确版本(包括间接依赖),确保构建的可重复性。
  • 工作区(Workspace):用于管理多个关联的 Rust 包(crate),共享依赖和构建缓存。
  • 包(Package):一个可发布的 Rust 项目,包含 Cargo.toml 和代码(通常在 src/ 目录下)。
  • 目标(Target):可编译的产物,如二进制文件(src/main.rs)、库(src/lib.rs)或自定义构建脚本。

在这里插入图片描述

二、基础操作:创建与管理项目

1. 创建新项目
# 创建二进制项目(默认,生成 src/main.rs)
cargo new hello_world
cd hello_world
# 创建库项目(生成 src/lib.rs)
cargo new --lib my_lib
# 查看项目结构
tree
# hello_world/
# ├── Cargo.toml
# └── src/
# └── main.rs

原理cargo new 会根据模板生成标准项目结构,Cargo.toml 包含初始元数据(如 nameversion),src/main.rs 是二进制入口(fn main() 是程序起点)。

2. 构建项目
# 调试模式构建(默认,生成未优化的二进制文件,路径:target/debug/hello_world)
cargo build
# 发布模式构建(优化代码,生成路径:target/release/hello_world)
cargo build --release
# 检查代码是否能编译(不生成二进制文件,更快)
cargo check
# 清理构建产物
cargo clean

原理:Cargo 调用 Rust 编译器(rustc)进行编译,调试模式(debug)保留调试信息(便于断点调试),发布模式(release)启用优化(如内联、循环展开)。cargo check 跳过链接阶段,仅验证语法和类型正确性,适合快速迭代。

3. 运行项目
# 直接运行调试模式构建的二进制文件(无需手动 cargo build)
cargo run
# 运行发布模式构建的程序(需先 cargo build --release)
cargo run --release

三、依赖管理:添加与管理第三方库

Cargo 的核心优势之一是自动解析和下载依赖,支持语义化版本(SemVer,如 ^1.2.3 表示兼容 1.2.x 的更新)。

1. 添加依赖

修改 Cargo.toml[dependencies] 部分,添加需要的库。例如,添加 HTTP 客户端 reqwest 和序列化库 serde

[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
[dependencies]
reqwest = { version = "0.11", features = ["json"] }  # 启用 json 特性
serde = { version = "1.0", features = ["derive"] }   # 启用 derive 特性(用于 #[derive(Serialize, Deserialize)])

说明

  • version:指定依赖的版本范围(0.11 等价于 ^0.11.0,即允许 0.11.x 的更新)。
  • features:启用可选特性(部分库通过特性开关控制功能,如 reqwestjson 特性依赖 serde_json)。
  • 其他版本语法示例:
    • =1.2.3:严格匹配 1.2.3。
    • ^1.2:允许 1.2.x(不包括 2.0.0)。
    • ~1.2.3:允许 1.2.x(不包括 1.3.0)。
    • *:任意版本(不推荐,可能导致构建不稳定)。
2. 下载依赖

添加依赖后,首次构建时会自动下载:

cargo build # 自动解析并下载 reqwest、serde 及其依赖

原理:Cargo 读取 Cargo.toml 中的依赖描述,查询 https://crates.io/(Rust 官方包仓库)获取最新兼容版本,下载到本地缓存(默认路径:~/.cargo/registry),并在 Cargo.lock 中记录精确版本。

3. 查看依赖树
cargo tree # 查看依赖层级(扁平化显示)
cargo tree --depth 2 # 仅显示前两层依赖

输出示例

hello_world v0.1.0
├── reqwest v0.11.18
│   ├── serde v1.0.197 (*)
│   ├── tokio v1.36.0
│   │   ├── tokio-macros v2.3.1
│   │   └── ...
└── serde v1.0.197

作用:排查依赖冲突(如两个依赖要求同一库的不同版本),通过 Cargo.lock 锁定版本后,所有依赖将使用同一版本。

4. 管理开发依赖

测试、文档生成等仅在开发阶段需要的依赖,应放在 [dev-dependencies] 中:

[dev-dependencies]
rstest = "0.18"  # 用于编写测试用例

说明[dev-dependencies] 中的库不会被打包到最终发布的二进制文件中,仅用于本地测试和文档生成。

四、高级功能:自定义构建与扩展

1. 构建脚本(Build Script)

通过 build.rs 可以在编译前执行自定义逻辑(如生成代码、调用外部工具)。
步骤

  1. 在项目根目录创建 build.rs
  2. Cargo.toml 中声明 build = "build.rs"
  3. build.rs 中使用 println!("cargo:rustc-env=VAR=value") 向编译器传递环境变量。

示例(生成版本信息):

// build.rs
fn main() {
let version = env!("CARGO_PKG_VERSION");
// 读取 Cargo.toml 中的 version
println!("cargo:rustc-env=APP_VERSION={}", version);
}
// src/main.rs
fn main() {
println!("App version: {}", env!("APP_VERSION"));
// 输出 0.1.0
}
2. 工作区(Workspace)

当项目包含多个关联的包(如主程序 + 工具库 + 测试库),可以使用工作区统一管理。
示例结构

my_workspace/
├── Cargo.toml       # 工作区清单
├── apps/
│   └── main_app/    # 主程序包
│       ├── Cargo.toml
│       └── src/
├── libs/
│   ├── utils/       # 工具库
│   │   ├── Cargo.toml
│   │   └── src/
│   └── api/         # API 库
│       ├── Cargo.toml
│       └── src/
└── tests/           # 集成测试(可选)

工作区 Cargo.toml

[workspace]
members = [
"apps/main_app",
"libs/utils",
"libs/api",
]
resolver = "2"  # 使用新版依赖解析器(推荐)

作用

  • 共享依赖:所有成员包共用 Cargo.lock(位于工作区根目录),避免重复下载。
  • 统一构建:cargo build --workspace 会构建所有成员包。
  • 发布管理:可批量发布工作区中的包。
3. 特性(Features)

特性用于启用可选功能,常见于库开发。例如,某个库支持 async 运行时(如 tokioasync-std),可通过特性让用户选择。

库的 Cargo.toml 示例

[package]
name = "async_utils"
version = "0.1.0"
[features]
default = ["tokio-runtime"]  # 默认启用 tokio 运行时
tokio-runtime = ["dep:tokio"]  # 启用 tokio 依赖
async-std-runtime = ["dep:async-std"]  # 启用 async-std 依赖
[dependencies]
tokio = { version = "1.0", optional = true }  # 可选依赖
async-std = { version = "1.0", optional = true }

用户使用时

[dependencies]
async_utils = { version = "0.1.0", features = ["async-std-runtime"] }  # 启用 async-std 特性

原理optional = true 标记依赖为可选,features 中通过 dep:name 语法关联可选依赖,用户通过 features 开关启用功能。

五、测试与文档

1. 运行测试

Cargo 集成了测试框架,支持单元测试(#[test])、集成测试(tests/ 目录下的文件)和文档测试(/// 注释中的示例)。

示例测试

// src/lib.rs
pub fn add(a: i32, b: i32) ->
i32 {
a + b
}#[cfg(test)]
mod tests {
use super::*;#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
}
}

运行测试

cargo test # 运行所有测试(单元 + 文档测试)
cargo test test_add # 运行特定测试
cargo test -- --nocapture # 显示测试输出的详细日志(默认会截断)
2. 生成文档

Cargo 可以为库生成 HTML 文档(基于 Rustdoc),包含代码注释和示例。

生成文档

cargo doc # 生成文档到 target/doc/<包名>/cargo doc --open # 生成后自动打开浏览器查看

文档注释示例

/// 计算两个整数的和
///
/// # 示例
/// ```
/// assert_eq!(async_utils::add(2, 3), 5);
/// ```
pub fn add(a: i32, b: i32) ->
i32 {
a + b
}

说明cargo doc 会解析 /// 注释,生成包含示例代码(可执行验证)的文档,适合库的 API 说明。

六、发布与共享

1. 发布到 crates.io

将包发布到 https://crates.io/ 供他人使用,需先注册账号并获取 API Token。

步骤

  1. 登录 https://crates.io/,进入账户设置,复制 API Token。
  2. 本地终端执行 cargo login <API_TOKEN> 完成认证。
  3. 确保 Cargo.toml 中的元数据完整(nameversiondescriptionlicense 等)。
  4. 执行 cargo publish 上传包。

注意:发布后版本不可修改,若需修复 bug 需递增版本号(如从 0.1.00.1.1)后重新发布。

2. 安装二进制包

通过 cargo install 可以安装 crates.io 上的二进制包(如 ripgrepfd-find)。

示例

cargo install ripgrep # 安装 ripgrep(rg 命令行工具)

原理cargo install 下载包,编译二进制文件,并安装到 ~/.cargo/bin/(需将该路径添加到 PATH 环境变量以全局访问)。

七、配置与优化

1. 配置镜像源(国内加速)

由于网络原因,国内用户可通过修改 Cargo 配置文件,使用国内镜像源(如清华源、中科大源)。

配置方法

  1. ~/.cargo/config.toml(Linux/macOS)或 %USERPROFILE%\.cargo\config.toml(Windows)中添加:
    [source.crates-io]
    replace-with = 'tuna'  # 使用清华源
    [source.tuna]
    registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
    [registries.tuna]
    index = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
    [net]
    git-fetch-with-cli = true  # 可选:使用 git 命令行加速克隆
2. 优化构建速度
  • 并行编译:设置环境变量 CARGO_BUILD_JOBS=NN 为 CPU 核心数),例如 CARGO_BUILD_JOBS=8 cargo build
  • 增量编译:Cargo 默认启用增量编译(仅重新编译修改的部分),可通过 CARGO_INCREMENTAL=1 强制启用(默认已启用)。
  • 使用 sccachesccache 是 Rust 的编译缓存工具,可缓存编译结果加速后续构建:
    cargo install sccache # 安装 sccache
    export RUSTC_WRAPPER=sccache # Linux/macOS
    set RUSTC_WRAPPER=sccache # Windows

总结

Cargo 是 Rust 生态的核心工具,通过标准化的 Cargo.toml 和自动化流程,极大简化了依赖管理、构建和发布。掌握其核心功能(项目创建、依赖管理、测试文档、发布)后,开发者可高效构建和维护 Rust 项目。实际使用中,建议结合 cargo clippy(代码检查)、cargo fmt(代码格式化)等工具进一步提升代码质量。

相关文章:

Rust的Cargo用法详解 - 详解

Rust的Cargo用法详解 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-si…...

串行通信接口标准(TTL、CMOS、RS232、RS422、RS485、CAN等)

TTL电平 引言 TTL是 Transistor-Transistor Logic(晶体管-晶体管逻辑)的缩写,是早期基于双极性晶体管(BJT)技术的逻辑家族。 电平特点 1. 电源电压:+5V 2. 电平标准:Voh:≥ 2.4V; Vol: ≤ 0.4V; Vih:≥ 2.0V; Vil: ≤ 0.8V;核心特点: 1. 输入悬空:TTL输入引脚如…...

攻防世界-IgniteMe - xxx

先查壳,发现没加壳,拖入ida-32反汇编了得到主函数 粗略看一下,能得到的信息有 输入的字符串长度为29,前四个字符是EIS{,最后一个字符是}想要输出Congratulations!关键的函数就是这个 4011C0函数,我们点进去看一下函数逻辑很明显,for循环之前就是把之前输入的字符串str除…...

C 语言 之 面向对象(一)

C 语言 之 面向对象(一)C 语言 之 面向对象(一) 了解C语言面向对象之前首先需要对C语言的指针、结构体有基本了解。 指针 正常使用数组: void hello(){#define count 10// shint a[count] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};for(int i = 0; i < count; i ++ ){printf(…...

for_switch

func forCase() {for i := 0; i < 10; i++ {if i == 5 {continue}fmt.Println("位置1 执行 for 语句块 i:", i)}fmt.Println("-------循环 slice ------")list := []int{1, 2, 3, 4, 5}for index, value := range list {fmt.Println("循环切片 执…...

快速幂

前题引入 我们平时用的pow函数速度太慢了怎么办,我就就需要快速幂(意思废话) 题目分析 前题铺垫 你只是需要知道一个非常简单的东西 a^b + a^c =a^(b+c) 思路 既然暴力是O(b)的,那我们是不是可以考虑O(log b) 那我们尝试将b除以2 那么就可以知道a^b = a^b/2 + a^b/2 但是我…...

模拟退火

#include<bits/stdc++.h> using namespace std; double kai=10000,eps=1,jiang=0.92,fw;//fw 记得赋值 mt19937 rd(time(0)); #define bu t*(rd()%(2*(int)fw)*1.0-fw) #define gl 1.0*rand()/RAND_MAX int ans,sx;//题目要求时开 double int cha(int x) {/**/return a…...

记录我见过的神人

魔丸《待审核》 注:团长高仿号申请进团焯神观察兵古风 古风...

DOS指令学习

打开CMD的方式 1.开始+系统+命令指示符 2.Win键+R 输入cmd 打开控制台(推荐使用) 3.在任意的文件下面,按住shift键+鼠标右键点击,在此处打开命令窗口 4.资源管理器的地址栏前面加上cmd路径 管理员方式运行:选择以管理员方式运行 常用的Dos命令 #盘符切换 #查看当前目录下的…...

【Azure环境】使用ARM Template部署Policy模板时候报错不支持filed函数: The template function field is not valid.

问题描述 Azure Policy可以帮助治理Azure上的资源, 也可以通过ARM 模板部署。只是当Policy中包含了field 函数的时候,会出现错误!"parameters": {"keyVaultName": {"value": "[field(name)]"}} 错误信息:Unable to process temp…...

CDQ分治

一、解决偏序问题 不言即默认非严格偏序问题。 严格偏序,未有此题。 若汝要学,小点三维。 同 \(a\) 者并,\(b\) \(c\) 小改。 幸甚至哉,歌以咏志。 三维偏序 按第一维排序,通过只计算左对右造成的贡献来满足第一维偏序条件。 第二维对于左右两个区间分别独自按第二维排序然…...

开源AI大模型、AI智能名片与S2B2C商城小代码:从“不出现=不存在”到“精准存在”的数字化转型路径

开源AI大模型、AI智能名片与S2B2C商城小代码:从“不出现=不存在”到“精准存在”的数字化转型路径pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…...

202509 组合数学与计数类 DP 笔记

1. P2051 [AHOI2009] 中国象棋 一格一格进行考虑做 DP 想不出来,考虑到一行实际上只需要选两格进行操作,因此可以一行一行操作。 设 \(f_{i,j,k}\) 表示考虑到第 \(i\) 行,有 \(m-j-k\) 列有 \(0\) 个棋子,有 \(j\) 列有 \(1\) 个棋子,有 \(k\) 列有 \(2\) 个棋子。边界条…...

edu 106 E(LCS dp + 多源bfs优化)

E 先考虑对两个固定串怎么做:可以确定形成串的末尾一定是 \(a_{i}\) 或者 \(b_{j}\),直接子序列 \(dp\) 即可:\(dp_{i,j,0/1}\) 表示只考虑 \(a\) 长度为 \(i\) 的前缀和 \(b\) 长度为 \(j\) 的前缀,\(0\) 表示形成的串以 \(a_{i}\) 结尾;\(1\) 表示形成的串以 \(b_{j}\) …...

ABC310E NAND repeatedly 题解

https://atcoder.jp/contests/abc310/tasks/abc310_e 一个奇怪的递归式 + \(N \le 10^6\), 试试动态规划 设 \(dp_{i,j}\) 为对于所有 \(1 \le l \le i\) 满足 \(f(l, i)=j\) 的数量, 其中 \(j \in \{0,1\}\). 最后答案就是 \(\sum\limits_{i=1}^{n}dp_{i,1}\) 分情况讨论:当 \…...

MyBatis插入语句配置

MyBatis 插入语句配置 <sql id="Manage_field"> id,userName,passWord,realName</sql> <!-- 实体类属性--><sql id="Manage_insert">#{id},#{userName},#{passWord},#{realName}</sql><insert id="insert" …...

操作运算符

package _caseimport "fmt"// 关系运算 func RelationCase() {var a = 21var b = 10fmt.Println("a == b", a == b)fmt.Println("a != b", a != b)fmt.Println("a > b", a > b)fmt.Println("a < b", a < b)fmt.…...

看 NOI2025 游记记

我很久以前看过 50+ 篇让我印象深刻的 NOI 游记,里面有句话让我在看游记前的某次梦里想起:“看游记好爽,心潮在荡漾”。 Day0(2025.7.31) 状态不是很好,看了几篇游记复习了一下。 Day1(2025.8.1) 早上 6:15 起床,6:30 到机房,老师宣读早读板子,登上洛谷,我迅速打开…...

整体二分

前言 注意:以下的 “元素” 都代表原题中的一个操作。 大说 把当前值域一分为二,把当前元素集合,每个元素的决策只有左区间 or 右区间,可以把同决策的元素放在一起去分治子区间(类似于线段树的结构)。 如下图(左边是值域区间,右边是元素集合):上图每个询问的答案: ①…...

得力 - Bruce

@echo off title Win10 游戏下载速度优化脚本 echo ===================================== echo Win10 游戏下载慢 - 优化工具 echo (请以管理员身份运行) echo ===================================== echo.:: 关闭 Windows 更新的传递优化 echo [1/6] 正在关闭 Windows …...

短视频营销运营导师张伽赫,绳木传媒AI+短视频引领企业数字化变革

在当下企业数字化转型的浪潮中,短视频营销已成为关键赛道。张伽赫,这位深耕短视频领域十年的实战派导师,同时也是东莞绳木传媒的创始人,凭借 “AI+短视频” 的创新模式,在行业内异军突起,为众多传统企业提供了数字化转型的全新思路与解决方案。一、方法论革新:从流量思维…...

详细介绍:还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”

详细介绍:还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…...

用 TensorFlow 和 CNN 实现验证码识别

在本教程中,我们将使用 TensorFlow 和 卷积神经网络(CNN) 来构建一个验证码识别系统。TensorFlow 是一个流行的深度学习框架,支持构建和训练神经网络。通过构建卷积神经网络(CNN),我们可以自动从图像中提取特征并执行字符分类任务。环境准备首先,我们需要安装 TensorFl…...

用 PyTorch 和 CNN 进行验证码识别

在本教程中,我们将使用 PyTorch 和 卷积神经网络(CNN) 来构建一个验证码识别系统。PyTorch 是一个广泛使用的深度学习框架,特别适合研究和原型设计。卷积神经网络(CNN)是处理图像数据的强大工具,它可以自动从图像中学习特征,并执行图像分类等任务。环境准备首先,确保你…...

用 Keras 和 CNN 进行验证码识别

在本教程中,我们将利用 Keras 和 卷积神经网络(CNN) 来构建一个验证码识别系统。Keras 是一个高层神经网络 API,它运行在 TensorFlow、Microsoft Cognitive Toolkit(CNTK)或 Theano 之上,能够让我们快速构建深度学习模型。CNN 是一种常用于图像识别任务的深度学习架构,…...

从 Bank Conflict 数学表示看 Buffer 设计 Trade-Off

在并行处理器设计中,我们希望最大化访存吞吐,让更多的数据分布在不同的 bank,而非在一个 bank 中产生堵塞。一种场景是面对多应用并行,这往往可以通过划分上下文基地址隔离;而另一种场景则是高并行同一个数据共用基地址,本文针对该场景下常见情形 Tensor Data Layout 进行…...

被彼此笼罩 任泪水将我们缠绕 深陷入恶魔的拥抱 在阴冷黑暗处灼烧 吞下这毒药

方格染色grid 不难发现按着行顺着来,odt 那样维护即可。数字图graph 为什么本可做这个题做了很久(? 首先显然可以二分降低难度,然后就是观察。...

mysql无法连接服务器的mysql #mysql8

1、云服务器要开放tcp 3306端口 登录云服务器提供商的,添加开放端口2、配置mysql允许非本地连接 编辑:/etc/my.cnf 或(如果配置了不生效) /etc/mysql/mysql.conf.d/mysqld.cnf 修改: ... [mysqld]bind-address = 0.0.0.0 ... 验证:mysql> SHOW GLOBAL VARIABLES LIKE …...

DAG 最小路径覆盖问题 笔记

原来我还学过这么个玩意。 一、笔记 P2764 最小路径覆盖问题 首先让 \(n\) 个点每个点都是单独的一条路径,接着考虑合并路径。 把每个点拆成只有入度的点和只有出度的点,合并就相当于连接一个只有出度的点和另一个只有入度的点。 显然合并完成后每个拆开的点都最多只能连一条…...

SP3D c# 开发独立的exe

此方法避免了启动S3D的过程 S3D.net API允许编写独立应用程序,即外部自动化TaskHost可执行文件。 在独立应用程序中可以编写哪些自动化?检查自动化-检查对象/数据,并采取一些行动,如生成报告文件/输出文件。数据挖掘-对对象和相关对象进行一些数据处理/数据挖掘,生成报告。…...

python错误code

没有遍历完,就打印了结果模拟商品购物shopp_user = [] user_buy = [] for i in range(0,5):name_shop = input("请输入商品名称:")shopp_user.append(name_shop)for i in shopp_user:print(i)while True:user_choose=input("请输入购买的商品编号:")# 输入…...

瑞 ping 我

ping瑞 ping 我...

java八股文笔记 - 指南

java八股文笔记 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 1…...

NOIP 模拟赛十六

BIT/构造+DP+bitset/DP+平衡树/欧拉序A. 发现答案只有 \(0, 1, 2\) 三种。 将 \(0\) 直接判掉,\(1\) 可以通过树状数组+双指针解决。 记 \(k\) 为需要减少的逆序对数量。 具体的,枚举左端点 \(l\) ,加入右端点 \(r\) ,判断逆序对数 \(cnt\) 是否 \(\ge k\) ,如果是,结束。…...

【AT_dp_y】Grid 2 - Harvey

题意 要求从 \((1,1)\) 走到 \((n,m)\),不能经过障碍物,问方案数。 \(1 \leq n,m \leq 10^5,1 \leq k \leq 3000\)。 思路 首先先解决弱化版,若没有障碍物的方案数,显然是 \(\binom{n+m-2}{n-1}\)。 则我们可以用总 - 非法,考虑经过多少个障碍物进行容斥。 如果按个数去枚…...

C#十五天 026多态重写 027抽象类与开闭原则 028接口,依赖反转,单元测试

在类的重写当中 父类需要加入一个关键字叫:Virtual,子类需要加一个关键字叫:override例: 父类 public virtual void FuLei(){} 子类 public override void ZiLei如果用父类变量去引用子类实例不用v和o的话就叫隐藏这样声明的实例方法还是运行父类方法,加了o和v的才…...

解题报告-P11844 [USACO25FEB] Friendship Editing G

P11844 [USACO25FEB] Friendship Editing G 题目描述 Farmer John 的 \(N\) 头奶牛编号为 \(1\) 到 \(N\)(\(2\le N\le 16\))。奶牛之间的朋友关系可以建模为一个有 \(M\)(\(0\le M\le N(N-1)/2\))条边的无向图。两头奶牛为朋友当且仅当图中她们之间存在一条边。 在一次操作…...

CSP-S模拟23

\(T1:\) 选彩笔(rgb) 思路: 签到题 (但是没签上),二分答案,在写一个三维前缀和\(check\)一下就搞定了。如果忘记三维前缀和的话,请看这里 代码:$code$ #include<iostream> using namespace std; const int N=1e4+5; int n,m,b,g,r,x,y,z,ans,num,maxn,sum[260]…...

CF1413F Roads and Ramen

结论是,路径中有一个端点是直径端点。 你这么想,设 \(dis_i\) 为 \(1\) 到 \(i\) 的 \(1\) 的个数,如果对于一条直径 \(p \to q\),若 \(dis_p = dis_q\) 直接取直径即可。 否则,对于每个点 \(u\),总有 \(p, q\) 中的一个与其 \(dis\) 相等,一个点到直径端点的距离最远,…...

复现The Annotated Transformer代码时遇到的问题和相关链接

The Annotated Transformer原网页:The Annotated Transformer The Annotated Transformer源代码:harvardnlp/annotated-transformer 《The Annotated Transformer》环境配置-CSDN博客 调试The Annotated Transformer_annotatedtransformer.ipynb-CSDN博客# 创建虚拟环境 cond…...

Node.js 文件上传中文文件名乱码难题,为什么只有Node会有乱码困难,其他后端框架少见?

Node.js 文件上传中文文件名乱码难题,为什么只有Node会有乱码困难,其他后端框架少见?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…...

lc1030-距离顺序排列矩阵单元格

难度:简单(后期)题目描述官方把题目描述得稀烂 左上角为 (0, 0),n x m 的点阵(屏幕坐标系,x轴向下,y轴向右) 给定其中一点 p,所有点按到 p 的曼哈顿距离排序示例 输入:rows = 1, cols = 2, rCenter = 0, cCenter = 0 输出:[[0,0],[0,1]]输入:rows = 2, cols = 2, r…...

说的道理。

说的道理。说的道理。 ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽…...

【abc180F】Unbranched - Harvey

题意 问有多少个满足以下条件且有 \(n\) 个点 \(m\) 条边的图:没有自环 每个点的度最大为 \(2\)。 最大的连通块大小恰好为 \(L\)。思路 首先分析:由于每个点的度最大为 \(2\),所以可以判断每个联通块要么是链,要么是环。 所以可以设计状态 \(f_{i,j}\) 表示有 \(i\) 个点,…...

合并区间-leetcode

题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,…...

两种判断计算机大小端模式的方法

两种判断计算机大小端模式的方法 在计算机系统里,数据存储有大端和小端两种模式。大端模式是高字节存在低地址,小端模式是低字节存在低地址。下面结合相关知识,用两种 C 语言方法判断大小端。 一、知识铺垫 (一)大小端存储规则大端存储(Big - Endian):数据的高字节存储…...

ROS2之节点

什么是节点? 在ROS2(机器人操作系统2)中,节点(node)是执行程序的基本单元,也是构成整个机器人系统的核心“积木”。你可以把它理解为系统中一个独立、可执行的进程,每个节点都专注于完成一个特定的、单一的功能。这种设计哲学让复杂的机器人系统变得模块化,易于开发、…...

9.17日总结

完成hbase部署和测试,开始搞hbase客户端...

ECT-OS-JiuHuaShan 框架,元推理AGI奇迹

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891 ▮ 推理就绪:基于自然辩证法数学形式化系统启动因果律算符 ECT-OS-JiuHuaShan 框架的诞生,绝非一次普通的技术迭代,它是文明进程中一个前所未有的 “确定性奇点”(Deterministic Singularity)——从此,智能的发…...

Mapper与Mapper.xml的关系

Mapper与Mapper.xml的关系简单直接的回答是:它们之间是“接口定义”与“SQL映射实现”的关系。 ManageMapper 是一个 Java 接口,它定义了数据库操作的方法签名;而 ManageMapper.xml 是一个 XML 文件,它提供了这些方法签名所对应的具体 SQL 语句实现。MyBatis 框架在运行时通…...