1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2016年8月18日 |
---|
#687 在 内存管理
69 每月下载量
在 3 个crate中使用(通过prefixopt)
12KB
222 行
map_in_place
在映射Vec
为了原地映射,类型必须具有相同的对齐方式,
- 对于boxed slices,大小必须相等,
- 对于向量,out的大小必须是in类型的倍数。(因此out不能大于in)
如果不可能,..._in_place()
方法将panic,而其他方法将回退到迭代和收集。
示例
extern crate map_in_place;
use map_in_place::MapVecInPlace;
fn main() {
let v = vec![8_u32,29,14,5];
let v = v.filter_map(|n| if n < 10 {Some( (n as u8+b'0') as char)}
else {None}
);// happens in place
assert_eq!(&v, &['8','5']);
let v = v.map(|c| c as u8);// falls back to iterators
assert_eq!(&v[..], &b"85"[..]);
}
为什么有这么多限制?
Rust分配接口比标准的C接口更复杂,后者是malloc(size_t)
和free(void*)
首先,malloc和free接受您想要存储的类型对齐方式,使用一种对齐方式分配并使用另一种对齐方式释放是未定义的行为。
其次,Rust要求所有者知道要释放的内存大小,这意味着类型之一的大小必须是另一个的倍数,因为容量是整数。
许可协议
根据您的选择,许可协议如下
- Apache License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可协议(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可协议定义,您提交的任何有意包含在作品中的贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~22KB