数组
数组是单一类型的对象的集合 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的使用,【标准库】查看
如下依次演示;
- 声明与初始化
- 添加元素
- 弹出元素(删除并返回最后一个元素)
- 合并两个vector
- vector中存储String
- 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)
关于String与&str 【标准库】
或者查看:https://blog.csdn.net/wowotuo/article/details/73729054