Vectors
Các vectơ là các mảng có thể thay đổi kích thước. Giống như các lát cắt, kích thước của chúng không được biết tại thời điểm biên dịch, nhưng chúng có thể tăng hoặc giảm kích thước bất cứ lúc nào. Một vectơ được biểu diễn bằng 3 tham số:
- con trỏ đến dữ liệu
- chiều dài
- dung lượng
Dung lượng cho biết dung lượng bộ nhớ được dành riêng cho vectơ. Vectơ có thể phát triển miễn là chiều dài nhỏ hơn dung lượng. Khi cần vượt qua ngưỡng này, vectơ được cấp phát lại với dung lượng lớn hơn.
fn main() { // Iterators có thể được gom thành vector let collected_iterator: Vec<i32> = (0..10).collect(); println!("Collected (0..10) into: {:?}", collected_iterator); // Macro `vec!` có thể dùng để khởi tạo một vector let mut xs = vec![1i32, 2, 3]; println!("Initial vector: {:?}", xs); // Chèn phần tử mới vào cuối vector println!("Push 4 into the vector"); xs.push(4); println!("Vector: {:?}", xs); // Lỗi! Các vectơ bất biến không thể phát triển collected_iterator.push(0); // FIXME ^ Comment out this line // Phương thức `len` trả về số lượng phần tử hiện được lưu trữ trong một vector println!("Vector length: {}", xs.len()); // Việc lập chỉ mục được thực hiện bằng cách sử dụng dấu ngoặc vuông (việc lập chỉ mục bắt đầu từ 0) println!("Second element: {}", xs[1]); // `pop` loại bỏ phần tử cuối cùng khỏi vector và trả về nó println!("Pop last element: {:?}", xs.pop()); // Lập chỉ mục ngoài giới hạn kiến trả về lỗi println!("Fourth element: {}", xs[3]); // FIXME ^ Comment out this line // `Vector`s có thể dễ dàng lặp lại println!("Contents of xs:"); for x in xs.iter() { println!("> {}", x); } // Một `Vector` cũng có thể được lặp lại trong khi lặp lại // số đếm được liệt kê trong một biến riêng biệt (`i`) for (i, x) in xs.iter().enumerate() { println!("In position {} we have value {}", i, x); } // Nhờ có `iter_mut`, `Vector` có thể thay đổi cũng có thể được lặp lại // kết thúc theo cách cho phép sửa đổi từng giá trị for x in xs.iter_mut() { *x *= 3; } println!("Updated vector: {:?}", xs); }
Có thể tìm thấy nhiều phương thức Vec
hơn trong module
std::vec