wxvirus wxvirus
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

无解的lifecycle

let today = new Beginning()
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C&C++

  • PHP

  • Python

  • Go

  • microservice

  • rust

    • windows安装和配置
    • rust的第一个程序
    • cargo
    • 变量和基本类型
    • 函数和模块
    • 函数参数传递
    • 表达式和语句以及判断
    • 字符串练习
    • 自定义函数和模块的使用
    • 结构体入门和基本写法
    • trait入门
    • 生命周期
    • Vector快速入门
      • 使用宏来定义
      • 使用 Vec::new 来创建
      • 遍历
    • 所有权以及所有权转移
    • 宏入门
    • 在struct中使用泛型
  • Java

  • 学习笔记

  • 后端
  • rust
wxvirus
2022-12-08

Vector快速入门

# vector 快速入门

它和数组是相反的,它是存在堆上的、是Rust标准库帮你做的功能、长度可以自动扩充。

# 使用宏来定义

fn main() {
    let tags = vec!["php", "java"];
    println("{:?}", tags);
}
1
2
3
4

如果要动态加,我们需要加上mut修饰。

fn main() {
    let mut tags = vec!["php", "java"];
    tags.push("go");
    println!("{:?}", tags);
}
1
2
3
4
5

# 使用 Vec::new 来创建

fn main() {
    let mut tags = Vec::new();
    tags.push("go");
    tags.push("php");
    tags.push("js");
    println!("{:?}", tags);
}
1
2
3
4
5
6
7

# 遍历

可以使用for的方式来遍历

fn main() {
    let mut tags = Vec::new();
    tags.push("js");
    tags.push("php");
    tags.push("java");
    // 左闭右开区间
    for i in 0..tags.len() {
        println!("{:?}", tags[i]);
    }
    println!("{:?}", tags);
}
1
2
3
4
5
6
7
8
9
10
11

如果是for i in xxx的方式,这里需要使用引用的方式

fn main() {
    let mut tags = Vec::new();
    tags.push("js");
    tags.push("php");
    tags.push("java");
    // 左闭右开区间
    for i in tags {
        println!("{:?}", i);
    }
    println!("{:?}", tags.len()); // 错误
}
1
2
3
4
5
6
7
8
9
10
11

这个时候还行使用tags获取长度,这里会报错 ,

 fn into_iter(self) -> Self::IntoIter;
    |                  ^^^^
help: consider iterating over a slice of the `Vec<&str>`'s content to avoid moving into the `for` loop
    |
13  |     for i in &tags {
    |              +

For more information about this error, try `rustc --explain E0382`.
1
2
3
4
5
6
7
8

它会让你使用引用的方式去借用

fn main() {
    let mut tags = Vec::new();
    tags.push("js");
    tags.push("php");
    tags.push("java");
    // 左闭右开区间
    for i in &tags {
        println!("{:?}", i);
    }
    println!("{:?}", tags.len());
}
1
2
3
4
5
6
7
8
9
10
11

修改里面的值,需要使用mut加解引用

fn main() {
    let mut tags = Vec::new();
    tags.push(1);
    tags.push(2);
    // 左闭右开区间
    for i in &mut tags {
        // 解引用
        *i = *i + 10
    }
    println!("{:?}", tags);
}
1
2
3
4
5
6
7
8
9
10
11

此时循环里的i就相当于是一个套上了&的引用,我们需要使用解引用获取原有的值然后才能去加减。

编辑 (opens new window)
#Vector
上次更新: 2022/12/08, 22:08:26
生命周期
所有权以及所有权转移

← 生命周期 所有权以及所有权转移→

最近更新
01
vue3配合vite初始化项目的一些配置
07-26
02
网盘系统开发学习
07-24
03
linux多进程
06-19
更多文章>
Theme by Vdoing | Copyright © 2021-2024 wxvirus 苏ICP备2021007210号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式