网站首页 > 资源文章 正文
使用Vector存储多个值
Vec<T>叫做vector:
- 由标准库提供
- 可存储多个值
- 只能存储相同类型的数据
- 值在内存中连续存放
创建Vector
使用Vec::new函数创建,例:
fn main() {
let vec: Vec<i32> = Vec::new();//因为new函数创建的是空的vector,
//里面没有数据,所以没法类型推断,需要在变量处指定
}
通常使用vec!宏来创建有初始值的Vec<T>,例:
fn main() {
let vec = vec![1, 2, 3];//由数据推断出vec的类型是Vec<i32>
}
更新Vector
向Vector添加元素,使用push方法。例:
fn main() {
let mut vec = Vec::new();
vec.push(1);//往vector添加数据后,编译器就可以推断类型,所以声明时不需指定类型
vec.push(2);
vec.push(3);
}
删除Vector
与任何其它struct一样,当Vector离开作用域后:
- 它就会被清理掉
- 里面的元素也被清理掉了
例:
fn main() {
let vec = vec![1, 2, 3];
}//离开作用域,vector和里面的元素都被清理掉
读取Vector的元素
有两种方式可以引用Vector里的值:
- 索引
- get方法
例:
fn main() {
let vec = vec![1, 2, 3];
let second = &vec[1];
println!("The second element is {}", second);
match vec.get(1) {
Some(second) => println!("The second element is {}.", second),
None => println!("There is no second element."),
}
}
索引 vs get处理访问越界
- 索引越界会导致程序运行时panic
- get返回值是Option,可使用None处理
所有权和借用规则
- 不能在同一作用域内同时拥有对某个值的可变和不可变引用,下面的代码就会编译失败
fn main() {
let mut vec = vec![1, 2, 3];
let second = &vec[1];
vec.push(4);
println!("The second element is {}", second);
}
引出一个问题:为什么编译器认为向Vector末尾push一个元素会引起&vec[1]的错误?因为Vector在内存中是连续存储的,向其末尾添加一个元素的时候可能存在空间不足的情况。此时内存会进行重分配,可能会导致&vec[1]指向的地址无效。
遍历Vector中的值
for循环,例:
fn main() {
let vec = vec![1, 2, 3];
for i in &vec {
println!("{}", i);
}
//利用可变引用,一边遍历,一边修改值
let mut vec = vec![1, 2, 3];
for i in &mut vec {
*i += 666;// *解引用
}
for i in &vec {
println!("{}", i);
}
}
使用enum来存储多种数据类型
- 枚举的变体可以附加不同类型的数据
- 枚举的变体定义在同一个枚举类型下,即变体都是同一个类型
所以可以创建一个使用附加数据的枚举类型的Vector,例:
enum SpreadsheetCell {
Int(i32),
Float(f64),
Text(String),
}
fn main() {
let row = vec![
SpreadsheetCell::Int(666),
SpreadsheetCell::Float(666.66),
SpreadsheetCell::Text(String::from("666")),
];
}
猜你喜欢
- 2024-10-29 C++遍历vector元素的四种方式(c++ iterator遍历)
- 2024-10-29 c++vector常用操作及函数(c++ vector常用方法)
- 2024-10-29 Vector冲锋枪:极富科技感的未来军械
- 2024-10-29 绝地求生:汤姆逊或超越M4成玩家最爱?Vector居然加入空投了!
- 2024-10-29 绝地求生Vector(当对面掏出短剑的时候,你已经凉了)
- 2024-10-29 std::vector的用法,删除,添加,更新成员?
- 2024-10-29 C++ Vector类型及使用(c++vector详解)
- 2024-10-29 数据安排与操作方式:vector的扩容操作
- 2024-10-29 C++中的动态内存管理:深入探讨std::vector与指针
- 2024-10-29 vector的底层是如何实现的?#代码(vector的原理)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)