Rust动态数组Vec

文章目录

初步示例

Rust提供了动态数组这种数据类型,所谓动态,就是长度可变,示例如下

rust 复制代码
fn main(){
    let mut vec = Vec::new();
    for i in 1..5{
        vec.push(i);
    }
    for i in &vec{
        println!("{}", i);
    }
}

其中,push用于在末尾添加一个元素。

虽然名为动态数组,但从内存分配的角度来说,Vec中存在一个静态连续的内存区域,用以提高性能。这部分容量可通过capacity()来获取,而当前数组中元素个数,则用len()来得到。

rust 复制代码
fn main(){
    let v=vec![1,2,3];
    println!("len():{}", v.len());
    println!("capacity():{}", v.capacity());
    // 二者都是3
}

创建动态数组

在Rust中,除了通过Vec::new()创建一个空的动态数组之外,也支持指定元素创建

rust 复制代码
let v = vec![1, 2, 3];

通过with_capacity方法,可以创建一个指定容量的数组

rust 复制代码
fn main(){
    let mut v:Vec<i32> = Vec::with_capacity(10);
    println!("len():{}", v.len());
    println!("capacity():{}", v.capacity());
}

其长度为0,容量为10。

增删改

Vec提供了一系列添加、删除以及改动元素的方式

方法 说明 方法 说明
pop 弹出末尾的元素 push 在末尾添加元素
remove 移除某个位置的元素 insert 在某个位置插入元素
append 在结尾拼接一个数组
clear 清空 truncate 截断
dedup 移除相邻且重复的元素 retain 保留复合条件的值

其中,append输入参数为另一个引用的动态数组,如果想要引用自身,则需克隆一下。

rust 复制代码
fn main(){
    let mut v1 = vec![1, 2, 3];
    v1.append(&mut v1.clone());
    println!("{}", v1.len());
}

有关dedup的详细解读,可见Rust根据条件删除相邻元素

迭代

动态数组可直接通过for循环进行迭代,前面的示例中已经介绍了&v在迭代中的表现,但是,若想修改迭代中的值,则需通过&mut进行引用。这两种迭代方式,可分别对应iter()和iter_mut()。

rust 复制代码
fn main(){
    let mut v = vec![1, 2, 3];
    for i in &mut v{
        *i += 5;
    }
    for i in v.iter_mut(){
        *i *= 2;
    }
    for i in v.iter(){
        println!("{}", i);
    }
}

输出为 12 , 14 , 16 12,14,16 12,14,16。

Vec提供了一系列sort函数,其中最简单的是sort(),其功能是将数组从小到大进行排列。

rust 复制代码
fn main(){
    let mut v = [-5, 4, 1, -3, 2];
    v.sort();
    println!("{:?}", v);
}

运行结果为

rust 复制代码
[-5, -3, 1, 2, 4]
相关推荐
醇氧6 小时前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
MapGIS技术支持7 小时前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
程序员zgh8 小时前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
小灰灰搞电子8 小时前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
by__csdn8 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
喵了meme8 小时前
C语言实战5
c语言·开发语言
廋到被风吹走8 小时前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式
Sammyyyyy9 小时前
DeepSeek v3.2 正式发布,对标 GPT-5
开发语言·人工智能·gpt·算法·servbay
Luna-player9 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
小草cys9 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript