我不得不更换

let mut bo = vec![];
try!(o.read_to_end(&mut bo));
let mut bo = bo.into_iter();
let vs : Vec<_> = (&mut bo).take(BUFFER).collect();
try!(io::stdout().write(&vs));

有了这个
let mut bo = vec![];
try!(o.read_to_end(&mut bo));
let mut io = 0;
let next = min(bo.len(), io + BUFFER);
try!(io::stdout().write(&bo[io..next]));

使用切片的速度是将数据复制到Vec的两倍以上。有没有一种方法可以使用take(n)而不进行复制?

最佳答案

Iterator::take 不进行任何复制。另一方面,将迭代器收集到向量中,既分配空间,又将项目从迭代器移到集合中。

在这里使用切片是最惯用的解决方案。您要在向量中输出一个连续的字节范围,将其切片可以使您几乎免费地查看这些字节的范围。

关于rust - 在迭代器上使用take而不复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34275181/

10-12 04:34