如何创建与 Vec 长度相同的数组?
How to create an array of the same length as a Vec?
我正在尝试创建一个与矢量长度相同的数组,但是我总是出错。
//my code
fn main() {
let v = vec![1,2,3];
let len = v.len();
let a: [i32; len] = [0; len];
println!("{:?}", a);
}
错误信息:
Compiling playground v0.0.1 (/playground)
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:4:18
|
3 | let len = v.len();
| ------- help: consider using `const` instead of `let`: `const len`
4 | let a: [i32; len] = [0; len];
| ^^^ non-constant value
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:4:29
|
3 | let len = v.len();
| ------- help: consider using `const` instead of `let`: `const len`
4 | let a: [i32; len] = [0; len];
| ^^^ non-constant value
For more information about this error, try `rustc --explain E0435`.
error: could not compile `playground` due to 2 previous errors
如果我将 len 声明为 const
fn main() {
let v = vec![1,2,3];
const len: usize = v.len();
let a: [i32; len] = [0; len];
println!("{:?}", a);
}
我收到这个错误:
Compiling playground v0.0.1 (/playground)
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:3:24
|
3 | const len: usize = v.len();
| --------- ^ non-constant value
| |
| help: consider using `let` instead of `const`: `let len`
For more information about this error, try `rustc --explain E0435`.
error: could not compile `playground` due to previous error
为什么上面的代码给我一个错误。在其他语言中,我可以将向量或数组列表的长度分配给常量变量。尽管 vec 的长度是可变的,但赋值时 vec 的长度必须是一个常量值。那么为什么我会收到此错误?
还有我如何在 Rust 中创建一个与 vector 长度相同的数组?
Rust 中的数组是值(类似于 C/C++ 中的数组),与 Java、C#、Python,等等,其中元素的连续存储分配在别处(堆)并从 array-typed 变量引用。
因此,Rust 中数组的大小必须在编译时已知,因为这决定了数组值需要多少字节的内存。
如果您想要 dynamically-sized 数组的灵活性,那么您需要一个由 fixed-size 结构指向的单独分配,它将为您管理分配。值得庆幸的是,Rust 带有其中一种类型!它叫做 Vec
!
我正在尝试创建一个与矢量长度相同的数组,但是我总是出错。
//my code
fn main() {
let v = vec![1,2,3];
let len = v.len();
let a: [i32; len] = [0; len];
println!("{:?}", a);
}
错误信息:
Compiling playground v0.0.1 (/playground)
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:4:18
|
3 | let len = v.len();
| ------- help: consider using `const` instead of `let`: `const len`
4 | let a: [i32; len] = [0; len];
| ^^^ non-constant value
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:4:29
|
3 | let len = v.len();
| ------- help: consider using `const` instead of `let`: `const len`
4 | let a: [i32; len] = [0; len];
| ^^^ non-constant value
For more information about this error, try `rustc --explain E0435`.
error: could not compile `playground` due to 2 previous errors
如果我将 len 声明为 const
fn main() {
let v = vec![1,2,3];
const len: usize = v.len();
let a: [i32; len] = [0; len];
println!("{:?}", a);
}
我收到这个错误:
Compiling playground v0.0.1 (/playground)
error[E0435]: attempt to use a non-constant value in a constant
--> src/main.rs:3:24
|
3 | const len: usize = v.len();
| --------- ^ non-constant value
| |
| help: consider using `let` instead of `const`: `let len`
For more information about this error, try `rustc --explain E0435`.
error: could not compile `playground` due to previous error
为什么上面的代码给我一个错误。在其他语言中,我可以将向量或数组列表的长度分配给常量变量。尽管 vec 的长度是可变的,但赋值时 vec 的长度必须是一个常量值。那么为什么我会收到此错误?
还有我如何在 Rust 中创建一个与 vector 长度相同的数组?
Rust 中的数组是值(类似于 C/C++ 中的数组),与 Java、C#、Python,等等,其中元素的连续存储分配在别处(堆)并从 array-typed 变量引用。
因此,Rust 中数组的大小必须在编译时已知,因为这决定了数组值需要多少字节的内存。
如果您想要 dynamically-sized 数组的灵活性,那么您需要一个由 fixed-size 结构指向的单独分配,它将为您管理分配。值得庆幸的是,Rust 带有其中一种类型!它叫做 Vec
!