24_vector

1. 概述

Vector,叫做Vector,又一个标准库提供,可存储多个值,只能存储相同的数据类型,这些值在内存中连续存放。

使用Vec::new创建Vector,如下示例代码

Rust 复制代码
fn main() {
    let v: Vec<i32> = Vec::new();
}

也可以使用初始值创建Vec<T>,使用vec!宏,如下示例代码

Rust 复制代码
fn main() {
    let v = vec![1, 2, 3];
}

2. 更新vector

可以使用push方法添加元素,如下示例代码

Rust 复制代码
fn main() {
    let mut v = Vec::new();
    v.push(1);
    v.push(2);
    v.push(3);
}

3. 读取vector的元素

两种方式可以引用vector里的值,索引、get方法,如下示例代码

rust 复制代码
fn main() {
    let v = vec![1, 2, 3, 4, 5];
    let third: &i32 = &v[2];
    println!("The third element is {}", third);

    match v.get(2) {
        Some(third) => println!("The third element id {}", third);

        None => println!("There is no third element");
    }
}

遍历vector

Rust 复制代码
fn main() {
    let v = vec![100, 32, 57];
    for i in &v {
        println!("{}", i);
    }
}

我们还可以在编译的过程中修改vector元素的值

Rust 复制代码
fn main() {
    let mut v = vec![100, 32, 57];
    for i in &mut v {
        *i += 50;
    }

    for i in v {
        println!("{}", i);
    }
}

4. 删除vector

与其他元素struct一样,当vector离开作用域后,它就被清理掉,它所有的元素也被清理掉。

5. 所有权和借用规则

不能在同一作用域内同时拥有可变和不可变引用。如下示例代码

rust 复制代码
fn main() {
    // 声明了一个可变的vec
    let mut v = vec![1, 2, 3, 4, 5];
    // 引用了一个不可变的借用
    let first = &v[0];
    // 又向v中添加值,这里发生了可变的借用,将导致报错
    v.push(6);
    println!("The first element is {}", first);
}

6. vector 和 enum

在vector里只能存放相同的数据,当我们需要存储不同的数据时。这时候我们就使用使用enum加上vector来存储数据。enum的变体可以附加不同类型的数据,enum的变体定义在同一个enum类型下。示例代码如下

rust 复制代码
enum SpreadsheetCell {
    Int(i32),
    Float(f64),
    Text(String)
}

fn main() {
    let row = vec![
        SpreadsheetCell::Int(3),
        SpreadsheetCell::Text(String::from("blue")),
        SpreadsheetCell::Float(12.12),
    ];
}
相关推荐
twins352041 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。2 小时前
案例-任务清单
前端·javascript·css
zqx_73 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己3 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称4 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色4 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript