1.可以用rust核心库自带的new函数 (在prelude中,无需import)
let v: Vec<i32> = Vec::new();
2.用vec!宏创建
let v = vec![1, 2, 3]; 或者 let v = vec![0xFF; 3];
3.更新
v.push(5); v.push(6); v.push(7); v.push(8);
4. 从 slice中复制
let b &[u8] = b"softs.im"; v.copy_from_slice(b);
copy_from_slice(&mut self, src: &[T])
速度很快,如果类型实现了Copy trait, 就会用memcpy复制元素。
如果没有实现,就是用 cloent_from_slice
此函数 要求src和self的长度一样
5. 替换元素
let mut v: Vec = vec![0xFF; 8]; let b: &[u8] = b"softs.im"; v.copy_from_slice(b); println!("v = {:?}", v);
6. 对于Vec<u8> 写入byte array, 是追加,不是覆盖。容量会自动增加
write(&mut self, buf: &[u8]) -> Result<usize> write_all(&mut self, buf: &[u8]) --> Result<()>
7. 对于Vec<u8> , 还可以从String来创建
from(string: String) -> Vec<u8, Global> from(s: &str) -> Vec<u8, Global>
8. 填充
let mut buf = vec![0; 10]; buf.fill(1); assert_eq!(buf, vec![1; 10]);
9. 用map zip进行复制
let a = [1, 2, 3, 4, 5]; let slice = &a[1..4]; let mut x: Vec<u8> = vec![0; 3]; println!("X at startup: {:?}", x); slice.iter().zip(x.iter_mut()).map(|(&t, p)| *p = t).count(); println!("X copied from vec: {:?}", x);
不用map, 可写成
for (&t, p) in slice.iter().zip(x.iter_mut()) { *p = t; }
10. 用 try_into()
11. 部分复制: 把buffer复制到memory偏移地址STARTING_PROGRAM_ADDRESS处
用枚举, 可以得到index for (index, byte) in buffer.iter().enumerate() { memory[STARTING_PROGRAM_ADDRESS + index] = *byte; } 用copy_from_slice memory[STARTING_PROGRAM_ADDRESS..(STARTING_PROGRAM_ADDRESS + buffer.len())] .copy_from_slice(buffer.as_slice()); 或 memory[STARTING_PROGRAM_ADDRESS..][..buffer.len()] .copy_from_slice(&buffer); 用zip for (src, dst) in buffer.iter().zip(memory.iter_mut().skip(STARTING_PROGRAM_ADDRESS)) { *dst = *src; } 或 for (src, dst) in buffer.iter().zip(&mut memory[STARTING_PROGRAM_ADDRESS..]){ *dst = *src; }