gpt4 book ai didi

c - 是否可以使用 libc 指针将 vector 转换为嵌套 vector ?

转载 作者:太空宇宙 更新时间:2023-11-04 05:34:11 25 4
gpt4 key购买 nike

我想将 vector ( Vec<u8> ) 转换为嵌套 vector ( Vec<Vec<u8>> ),例如:

[1,2,3,4,5,6] -> [[1,2,3], [4,5,6]]

为此,我不想使用迭代器,collectreduce , 我想转换 Vec进入 C 指针:

let ptr_vec = my_vec.as_ptr() as *const libc::c_void;

然后,转换这个伪 char *my_vec变成伪char *my_vec[3] ,所以我不必通读整个 vector 。

这可能吗?如果是这样,它真的会提高大型 vector 的性能吗?

最佳答案

Is it possible ?

没有。您不能通过指针转换执行类似的结构更改。打电话as_ptrVec<u8> 上会给你一个指向 Vec 的指针的类型元素 *const u8 .将其转换为 *const *const [u8; 3]没有意义,因为现在您试图将其视为指向指向 u8 数组的指针数组的指针.换句话说,你会解释 u8 s as 指向不存在数组的指针。

更糟糕的是,如果您将此指针转换回 Vec<Vec<u8>>,即使这确实 起作用了,你会在你开始重新分配东西的那一刻崩溃,因为你会 split 原始 Vec单一分配的所有权。多个之间Vec秒。这是一个问题,因为您不能分割分配的所有权;每个Vec将尝试释放整个内存块。

To do so, I don't want to use Iterators, ...

我想不出有什么理由为此使用迭代器,因为这个问题的任何有效解决方案都等同于:

fn main() {
let v = vec![1,2,3,4,5,6];
let vs = v.chunks(3).collect::<Vec<_>>();
println!("{:?}", vs);
}

关于c - 是否可以使用 libc 指针将 vector 转换为嵌套 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com