Vec

این Vec بافر قابل تغییر اندازه و heap-allocated است:

fn main() {
    let mut v1 = Vec::new();
    v1.push(42);
    println!("v1: len = {}, capacity = {}", v1.len(), v1.capacity());

    let mut v2 = Vec::with_capacity(v1.len() + 1);
    v2.extend(v1.iter());
    v2.push(9999);
    println!("v2: len = {}, capacity = {}", v2.len(), v2.capacity());

    // Canonical macro to initialize a vector with elements.
    let mut v3 = vec![0, 0, 1, 2, 3, 4];

    // Retain only the even elements.
    v3.retain(|x| x % 2 == 0);
    println!("{v3:?}");

    // Remove consecutive duplicates.
    v3.dedup();
    println!("{v3:?}");
}

Vec پیاده‌سازی‌کننده Deref<Target = [T]> است، به این معنی که می‌توانید متدهای برش را بر روی یک Vec فراخوانی کنید.

This slide should take about 5 minutes.
  • Vec نوعی مجموعه است، به همراه String و HashMap. داده‌های آن در حافظه heap ذخیره می‌شود. به این معنی که مقدار داده‌ها نیازی به دانستن در زمان کامپایل ندارد و می‌تواند در زمان اجرا رشد یا کوچک شود.
  • توجه داشته باشید که <Vec<T نیز یک تایپ generic است، اما نیازی به تعیین صریح T ندارید. همان‌طور که همیشه با استنتاج تایپ در Rust ، T در زمان اولین فراخوانی push مشخص شده است.
  • [...]!vec یک ماکرو استاندارد برای استفاده به‌جای ()Vec::new است و از افزودن عناصر اولیه به vector پشتیبانی می‌کند.
  • برای ایندکس‌گذاری vector از [ ] استفاده می‌کنید، اما اگر از محدوده خارج شود، باعث panic می‌شود. به‌طور جایگزین، استفاده از get یک Option را برمی‌گرداند. تابع pop آخرین عنصر را حذف می‌کند.
  • برش‌ها در روز سوم پوشش داده می‌شوند. در حال حاضر، دانش‌آموزان تنها باید بدانند که یک مقدار از تایپ Vec به تمام متدهای مستند شده برش‌ها نیز دسترسی دارد.