当前位置:  开发笔记 > 编程语言 > 正文

如何在Rust中运行时分配数组?

如何解决《如何在Rust中运行时分配数组?》经验,为你挑选了2个好方法。

一旦我分配了阵列,我该如何手动释放它?指针算法在不安全模式下是否可行?

就像在C++中一样:

double *A=new double[1000];
double *p=A;
int i;
for(i=0; i<1000; i++)
{
     *p=(double)i;
      p++;
}
delete[] A;

Rust中有任何等效的代码吗?



1> DK...:

根据您的问题,如果您还没有这样做,我建议您阅读Rust Book.Idiomatic Rust几乎从不涉及手动释放内存.

至于相当于动态数组,你想要的Vector.除非你做一些不寻常的事情,否则你应该避免在Rust中使用指针算法.您可以将上述代码编写为:

// Pre-allocate space, then fill it.
let mut a = Vec::with_capacity(1000);
for i in 0..1000 {
    a.push(i as f64);
}

// Allocate and initialise, then overwrite
let mut a = vec![0.0f64; 1000];
for i in 0..1000 {
    a[i] = i as f64;
}

// Construct directly from iterator.
let a: Vec = (0..1000).map(|n| n as f64).collect();


这个问题要求一个数组并提供C++等价物作为一个例子,而这个答案涵盖了动态集合类型.这也是前两个用于分配生锈阵列的谷歌结果,但我不认为这回答了这个问题.

2> 小智..:

完全有可能在堆上分配一个固定大小的数组:

let a = Box::new([0.0f64; 1000]);

由于deref强制,您仍然可以将其用作数组:

for i in 0..1000 {
    a[i] = i as f64;
}

您可以通过以下操作手动释放它:

std::mem::drop(a);

drop takes ownership of the array, so this is completely safe. As mentioned in the other answer, it is almost never necessary to do this, the box will be freed automatically when it goes out of scope.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有