Rust
Массивы, векторы и срезы
Поиск…
Массивы
Массив - это список объектов с одним стеком, заданный стеками.
Массивы обычно создаются путем включения списка элементов определенного типа между квадратными скобками. Тип массива обозначается специальным синтаксисом: [T; N]
где T
- тип его элементов, а N
их счет, оба из которых должны быть известны во время компиляции.
Например, [4u64, 5, 6]
представляет собой 3-элементный массив типа [u64; 3]
. Примечание: 5
и 6
как предполагается, имеют тип u64
.
пример
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]);
}
Ограничения
Совпадение шаблонов на массивах (или срезах) не поддерживается в стабильном Rust (см. # 23121 и шаблоны срезов ).
Ржавчина не поддерживает типичность цифр типа (см. RFC # 1657 ). Поэтому невозможно просто реализовать признак для всех массивов (всех размеров). В результате стандартные черты реализуются только для массивов с ограниченным количеством элементов (последний проверен, до 32 включительно). Массивы с большим количеством элементов поддерживаются, но не реализуют стандартные черты (см. Документы ).
Эти ограничения, мы надеемся, будут сняты в будущем.
векторы
Вектор - это, по существу, указатель на список, выделенный динамическим размером объектов одного типа.
пример
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]);
}
Ломтики
Срезы - это виды в список объектов и имеют тип [T]
, указывающий кусочек объектов с типом T
Срез - это нестандартный тип , поэтому его можно использовать только по указателю. (Строковая мировая аналогия: str
, называемый строковым срезом, также не поддерживается.)
Массивы набираются на срезы, и векторы могут быть разыменованы на срезы. Поэтому методы среза могут применяться к обоим из них. (Строковая мировая аналогия: str
- String
, что [T]
- 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]
}