0
点赞
收藏
分享

微信扫一扫

Rust 数组与向量


数组

数组是单一类型的对象的集合 T, 存储在连续内存中。 它们的大小在编译的时候确定,类型签名的一部分 ​​[T; size]​​.

切片
切片和数组相似,但它们的大小在编译时是不知道的。相反,切片是一个双字对象,第一个字是一个指针中的数据,第二个字是切片的长度。切片可借用数组的截面,并具有式签名 &[T]

声明和初始化数组,示例:

use std::mem;


fn analyze_slice(slice:&[i32]){
println!("first element of the slice: {}", slice[0]);
println!("the slice has {} elements", slice.len());
}


fn main() {
let array1:[i32;5] = [1,2,3,4,5]; //定长数组(类型标记可省略->可自动推断出)
let array2:[i32;5] = [0;5]; //初始化5个0
println!("数组1:{:?}",&array1);
println!("数组2:{:?}",&array2);
println!("数组1-切片:{:?}",&array1[0..2]);
println!("数组栈中分配:{}",mem::size_of_val(&array1));

analyze_slice(&array2[0..=4]);
}
// 数组1:[1, 2, 3, 4, 5]
// 数组2:[0, 0, 0, 0, 0]
// 数组1-切片:[1, 2]
// 数组栈中分配:20
// first element of the slice: 0
// the slice has 5 elements

vector

vector的使用,​​【标准库】查看​​

如下依次演示;

  1. 声明与初始化
  2. 添加元素
  3. 弹出元素(删除并返回最后一个元素)
  4. 合并两个vector
  5. vector中存储String
  6. 5vector中(通过枚举类型)存储不同类型的元素

#[derive(Debug)]
enum Data {
Name(String),
Age(u8),
Height(f32),
}


fn main() {
// 声明并初始化vector,无法动态添加和删除
let vec0 = vec![1, 2, 3, 4, 5];
let vec1 = vec!["a", "b", "c"];
println!("vec0={:?}",vec0);
println!("vec1={:?}",vec1);

// 声明动态vector,可添加和删除元素
let mut vec3: Vec<u32> = Vec::new();
vec3.push(11);
vec3.push(12);
vec3.push(13);
let x = vec3.pop();
println!("x={:?}",x);
println!("vec3={:?}",vec3);
for i in vec3.iter(){
println!("元素:{}",i)
}

let mut vec4 = Vec::with_capacity(5); // 初始化向量,声明初始空间
vec4.push(100);
vec4.push(101);
vec4.push(102);
vec4.push(103);

println!("vec4索引访问依次={},{},{},{}",&vec4[0],&vec4[1],&vec4[2],&vec4[3]);
println!("获取元素={:?}",vec4.get(0));

vec4.extend(vec3.iter().copied());
println!("合并两个vector=>vec4{:?}",vec4);



let mut names: Vec<String> = Vec::new();
names.push("zhangsan".to_string());
names.push("lisi".to_string());
names.push("wangwu".to_string());

for name in &names {
println!("name: {}", name);
}


let mut data_sets: Vec<Data> = Vec::new();
data_sets.push(Data::Name(String::from("wangmazi")));
data_sets.push(Data::Age(12));
data_sets.push(Data::Height(177.32));
for info_ in &data_sets{
println!("vetor中个人信息依次为:{:?}",info_)
}
}
// vec0=[1, 2, 3, 4, 5]
// vec1=["a", "b", "c"]
// x=Some(13)
// vec3=[11, 12]
// 元素:11
// 元素:12

// vec4索引访问依次=100,101,102,103
// 获取元素=Some(100)

// 合并两个vector=>vec4[100, 101, 102, 103, 11, 12]

// name: zhangsan
// name: lisi
// name: wangwu

// vetor中个人信息依次为:Name("wangmazi")
// vetor中个人信息依次为:Age(12)
// vetor中个人信息依次为:Height(177.32)



举报

相关推荐

0 条评论