Rust std(2) vertor
常用
with_capacity(capacity: usize) -> Vec<T, Global>
设置 cap 返回 vec
capacity(&self) -> usize
获取容量 cap
append(&mut self, other: &mut Vec<T, A>)
pop(&mut self) -> Option
push(&mut self, value: T)
reserve(&mut self, additional: usize)
clear(&mut self)
len(&self) -> usize
is_empty(&self) -> bool
try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>
为在给定的Vec
reserve_exact(&mut self, additional: usize)
try_reserve_exact( &mut self, additional: usize ) -> Result<(), TryReserveError>
预留最小容量 reserve_exact,在调用 reserve_exact 之后,容量将大于或等于 self.len() + reserve_exact, 如果容量已经足够,则什么也不做。
shrink_to_fit (&mut self)
缩容(由系统决定缩容值)
shrink_to (&mut self, min_capacity: usize )
指定缩容,如果没有足够的空间就不做操作
into_boxed_slice (self) -> Box < [ T ] , A>
将向量转换为Box<[T]>. 请注意,这将减少任何多余的容量。
truncate(&mut self, len: usize)
保留第一个len元素并删除其余元素,如果len大于向量的当前长度,则无效。cap不影响
as_slice (&self) -> &[T]
提取包含整个 vec 的切片。相当于&s[..]
as_mut_slice (&mut self) -> &mut [T]
提取整个向量的可变切片。 相当于&mut s[..]
swap_remove(&mut self, index: usize) -> T
o(1) 不保留排序,index 超出范围会 painc
remove(&mut self, index: usize) -> T
移除并返回矢量中索引位置的元素,将其之后的所有元素向左移动。O(n)
insert(&mut self, index: usize, element: T)
指定位置插入元素
retain(&mut self, f: F) where F: FnMut(&T) -> bool
遍历元素 根据函数返回 true 进行保留
retain_mut(&mut self, f: F) where F: FnMut(&mut T) -> bool
遍历元素 跟 retain 一样true 保留
dedup_by_key<F, K>(&mut self, key: F) where F: FnMut(&mut T) -> K, K: PartialEq
删除向量中解析为相同键的所有连续元素,但第一个元素除外。
如果向量已排序,则会删除所有重复项(连续元素)。
dedup_by(&mut self, same_bucket: F) where F: FnMut(&mut T, &mut T) -> bool
( next , current) true 删除 next ,flase 保留
drain(&mut self, range: R) -> Drain<'_, T, A>ⓘ where R: RangeBounds
从向量中批量移除指定的范围,并将所有移除的元素作为一个迭代器返回。如果迭代器在被完全消耗之前被丢弃,它会丢弃剩余的移除元素。
1
let u: Vec<_> = v.drain(1..).collect();
split_off(&mut self, at: usize) -> Vec<T, A>
返回一个新分配的向量,包含范围[at, len]内的元素。调用后,原向量将被留下,包含元素[0, at],其先前的容量没有改变 。
resize(&mut self, new_len: usize, value: T)
调整Vec的大小,使len等于new_len
如果new_len大于len,则Vec被扩展,每一个额外的槽被填满。
如果new_len小于len,那么Vec就被简单地截断了。
resize_with(&mut self, new_len: usize, f: F) where F: FnMut() -> T
如果new_len大于len,那么Vec被扩展,每一个额外的槽都被调用闭包f的结果所填充。
如果new_len小于len,Vec将被简单地截断。
Default::default 可以作为第二个参数
leak<’a>(self) -> &’a mut [T]
泄漏可变vec。从Rust 1.57开始,这个方法不会重新分配或缩小Vec,所以泄露的分配可能包括未使用的容量,而这些容量不属于返回的片断。
spare_capacity_mut(&mut self) -> &mut [MaybeUninit]
返回cap容量可修改,可以配合set_len 使用
as_ptr (&self) -> *const T
as_mut_ptr(&mut self) -> *mut T
###
不常用
unsafe fn from_raw_parts( ptr: *mut T, length: usize, capacity: usize ) -> Vec<T, Global>
unsafe 根据 数据源地址,len ,cap 进行设置 vec
unsafe fn set_len(&mut self, new_len: usize)
必须小于等于 cap
leak<’a>(self) -> &’a mut [T]
消耗并泄露Vec,返回对其内容的可变引用,&’a mut [T]。注意,类型T必须超过所选择的生命周期’a’。如果该类型只有静态引用,或者根本没有,那么可以选择 “静态”。
从Rust 1.57开始,这个方法不会重新分配或缩小Vec,所以泄露的分配可能包括未使用的容量,而这些容量不属于返回的片断。
spare_capacity_mut(&mut self) -> &mut [MaybeUninit]
返回向量的剩余容量,作为 MaybeUninit
在使用set_len方法将数据标记为初始化之前,返回的片断可以用来向向量中填充数据(例如从文件中读取)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Allocate vector big enough for 10 elements.
let mut v = Vec::with_capacity(10);
// Fill in the first 3 elements.
let uninit = v.spare_capacity_mut();
uninit[0].write(0);
uninit[1].write(1);
uninit[2].write(2);
// Mark the first 3 elements of the vector as being initialized.
unsafe {
v.set_len(3);
}
assert_eq!(&v, &[0, 1, 2]);
split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit])
将vec的内容作为T的一个片断返回,同时将vec的剩余容量作为 MaybeUninit
extend_from_slice(&mut self, other: &[T])
遍历vec元素追到调用的vec里