Rust
Matriser, vektorer och skivor
Sök…
arrayer
En matris är en stacktilldelad, statisk-stor lista med objekt av en enda typ.
Matriser skapas vanligtvis genom att lägga till en lista med element av en viss typ mellan fyrkantiga parenteser. Typen av en matris betecknas med den speciella syntaxen: [T; N]
där T
är typen av dess element och N
deras räkning, som båda måste vara kända vid sammanställningstiden.
Till exempel är [4u64, 5, 6]
en 3-element array av typen [u64; 3]
. Obs: 5
och 6
antas vara av typen u64
.
Exempel
fn main() {
// Arrays have a fixed size.
// All elements are of the same type.
let array = [1, 2, 3, 4, 5];
// Create an array of 20 elements where all elements are the same.
// The size should be a compile-time constant.
let ones = [1; 20];
// Get the length of an array.
println!("Length of ones: {}", ones.len());
// Access an element of an array.
// Indexing starts at 0.
println!("Second element of array: {}", array[1]);
// Run-time bounds-check.
// This panics with 'index out of bounds: the len is 5 but the index is 5'.
println!("Non existant element of array: {}", array[5]);
}
begränsningar
Mönstermatchning på matriser (eller skivor) kan inte användas i stabil Rust (se # 23121 och slice mönster ).
Rost stöder inte genericitet för typnivåsiffror (se RFC: er # 1657 ). Därför är det inte möjligt att helt enkelt implementera ett drag för alla matriser (i alla storlekar). Som ett resultat implementeras standarddragen endast för matriser upp till ett begränsat antal element (senast kontrollerat, upp till 32 inkluderade). Matriser med fler element stöds, men implementerar inte standarddragen (se dokument ).
Dessa begränsningar kommer förhoppningsvis att upphävas i framtiden.
vektorer
En vektor är i huvudsak en pekare till en högtilldelad, dynamisk stor lista med objekt av en enda typ.
Exempel
fn main() {
// Create a mutable empty vector
let mut vector = Vec::new();
vector.push(20);
vector.insert(0, 10); // insert at the beginning
println!("Second element of vector: {}", vector[1]); // 20
// Create a vector using the `vec!` macro
let till_five = vec![1, 2, 3, 4, 5];
// Create a vector of 20 elements where all elements are the same.
let ones = vec![1; 20];
// Get the length of a vector.
println!("Length of ones: {}", ones.len());
// Run-time bounds-check.
// This panics with 'index out of bounds: the len is 5 but the index is 5'.
println!("Non existant element of array: {}", till_five[5]);
}
skivor
Skivor är vyer i en lista med objekt och har typ [T]
, vilket indikerar en bit objekt med typ T
En skiva är en storleksanpassad typ och kan därför endast användas bakom en pekare. (Stringvärldsanalogi: str
, kallad strängskiva, är också ostorlek.)
Uppsättningar tvingas i skivor, och vektorer kan förflyttas till skivor. Därför kan skivmetoder tillämpas på båda. (Stringvärldsanalogi: str
är till String
, vad [T]
är för Vec<T>
.)
fn main() {
let vector = vec![1, 2, 3, 4, 5, 6, 7, 8];
let slice = &vector[3..6];
println!("length of slice: {}", slice.len()); // 3
println!("slice: {:?}", slice); // [4, 5, 6]
}