这个理解不对。Vec的into_iter不是通过“丢弃它的元素(缩小)”实现的。IntoIter拿走了原Vec的整个buffer,原Vec在into_iter之后直接消失。
数组没有into_iter只是rust编译器的技术限制,没有什么原理上的困难。相关代码上个月刚刚加入,rust下个版本里数组应该可以直接for in了。
【 在 z16166 的大作中提到: 】
: self的ownership发生了转移,所以是mut self。
: 可以改用for val in vals.iter()这个,iter()是ref,不是mut ref,这样for循环里面可以继续使用vals。
: "Rust 中的集合(Collection)提供三个公共方法创建迭代器:iter()、iter_mut() 和 into_iter(),分别用于迭代 &T(引用)、&mut T(可变引用)和 T(值)。其中,前两种是普通方法,而into_iter() 来自于 IntoIterator trait。Rust 的 for 循环其实是迭代器语法糖,当没有显式的使用迭代器时,它会根据不同的上下文,分别使用 T、&T 和 &mut T 类型所实现的 into_iter() 返回的迭代器。唯一的例外是数组,原因是数组不能丢弃它的元素(不能缩小),因此 [T; N] 类型无法实现 into_iter(),只有 &[T; N] 和 &mut [T; N] 类型实现了 into_iter()。"
: ...................
--
修改:ilovecpp FROM 58.37.58.*
FROM 58.37.58.*