[易学易懂系列|rustlang语言|零基础|快速入门|(10)|Vectors容器]

释放双眼,带上耳机,听听看~!

[易学易懂系列|rustlang语言|零基础|快速入门|(10)]

有意思的基础知识

Vectors

我们之前知道array数组是定长,只可我保存相同类型的数据的数据类型。

如果,我们想用不定长的数组呢?因为很多时候,数据有可能是或多或少,不确定个数的。

这时候,vector就出场了。

在Rust,vecotr是可变长度的数组,用于保存相同类型的数据。

vector是引用类型,其数据也是动态地在堆heap分配内存空间。

我们知道String类型,是引用类型。

其实,String底层,也就是用vector来保存字符串的数据的。

一般来说,vector在Rust里有三个主要部分:

1.指向数据(堆heap内存)的地址指针

2.当前成员数据的长度( length )。

3.容量( Capacity )。

vecotr定义的格式为:

Vec
其中T为泛型。

我们来看看示例代码:

构建一个空的vector


1
2
3
1let mut a = Vec::new(); //1.With new() keyword
2let mut b = vec![]; //2.Using the vec! macro
3

我们看到rust有两种构建vector的方法:

1.用new()关键词

2.用宏vec!(什么是宏,我们以后会讲到)

构建一个包含类型的vector:


1
2
3
4
5
6
7
8
9
1let mut a2: Vec<i32> = Vec::new();
2let mut b2: Vec<i32> = vec![];
3let mut b3 = vec![1i32, 2, 3];//Sufixing 1st value with data type
4
5let mut b4 = vec![1, 2, 3];
6let mut b5: Vec<i32> = vec![1, 2, 3];
7let mut b6  = vec![1i32, 2, 3];
8let mut b7 = vec![0; 10]; //Ten zeroes
9

访问并更新数据:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1//Accessing and changing existing data
2let mut c = vec![5, 4, 3, 2, 1];
3c[0] = 1;
4c[1] = 2;
5//c[6] = 2; Cannot assign values this way, index out of bounds
6println!("{:?}", c); //[1, 2, 3, 2, 1]
7
8//push and pop
9let mut d: Vec<i32> = Vec::new();
10d.push(1); //[1] : Add an element to the end
11d.push(2); //[1, 2]
12d.pop(); //[1] : : Remove an element from the end
13
14
15// ? Capacity and reallocation
16let mut e: Vec<i32> = Vec::with_capacity(10);
17println!("Length: {}, Capacity : {}", e.len(), e.capacity()); //Length: 0, Capacity : 10
18
19// These are all done without reallocating...
20for i in 0..10 {
21    e.push(i);
22}
23// ...but this may make the vector reallocate
24e.push(11);
25

如果要访问vector里的数据,迭代代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1let mut v = vec![1, 2, 3, 4, 5];
2
3for i in &v {
4    println!("A reference to {}", i);
5}
6
7for i in &mut v {
8    println!("A mutable reference to {}", i);
9}
10
11for i in v {
12    println!("Take ownership of the vector and its element {}", i);
13}
14

以上,希望对你有用。


1
2
1如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust
2

参考文章: https://learning-rust.github.io/docs/b1.vectors.html

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ explicit关键字

2022-1-11 12:36:11

安全经验

谷歌开源了一个项目,可为 C/C++ 库创建安全策略

2019-3-20 11:12:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索