vector - 如何在不删除先前值的情况下分配给未初始化的向量?
问题描述
我有一种情况,我知道如何初始化一个向量,但我不知道这些元素的确切顺序。
let mut vector = todo!();
for (index, element) in &hash_map {
vector[index] = element;
}
现在的问题是如何初始化向量。它包含的元素不是很轻量级,所以我宁愿通过创建一个未初始化的向量来作弊:
let mut vector = Vec::with_capacity(size);
unsafe { vector.set_len(size) };
问题是,当我稍后分配值时,我删除了前一个元素(这是未初始化的垃圾)并恐慌:
vector[index] = element;
如何在不触发默认丢弃行为的情况下将元素分配给向量?
解决方案
您可以使用pointer::write
或ptr::write
:
let mut vector: Vec<u8> = Vec::with_capacity(2);
unsafe {
let base = vector.as_mut_ptr();
base.offset(0).write(42);
vector.set_len(1);
};
println!("{:?}", vector);
但最好使用MaybeUninit
用于此目的的哪个。
也可以看看:
推荐阅读
- python-3.x - 当我写命令时,我看到了这个错误
- vim - Vim 中的剪贴板粘贴问题
- microsoft-graph-api - 在 Microsoft OneNote 中找不到(其他 Web 位置)选项?
- kdb - 第二天ticketplant如何在kdb中写入新的tplog?
- amazon-web-services - AWS“并发执行”与“突发并发”配额
- python - Selenium webdriver dns_config_watch_failed 和 usb 无法正常运行 Python
- android - 如何在颤振中存储 API 秘密
- python - 具有选择值和特定值频率的 numpy.random 生成的替代方案
- javascript - 谷歌云功能冻结超过一分钟
- javascript - 从 .each() jquery 动态创建对象