gpt4 book ai didi

c++ - 在 C++ CT 重建算法中使用数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:04 26 4
gpt4 key购买 nike

我正在使用 C++ 开发 CT 重建算法。我正在使用 C++,因为我需要使用一个用 C++ 编写的库,它可以让我读/写特定的文件格式。

此重建算法涉及处理 3D 和 2D 图像。我已经使用数组在 C 和 MATLAB 中编写了类似的算法。但是,我读到过,在 C++ 中,数组是“邪恶的”(参见 http://www.parashift.com/c++-faq-lite/containers.html)。我使用数组来操作图像(在 C 中)的方式如下(这会创建一个将用作 3D 图像的 3D 数组):

int i,j;
int *** image; /* another way to make a 5x12x27 array */

image = (int ***) malloc(depth * sizeof(int **));
for (i = 0; i < depth; ++i) {
image[i] = (int **) malloc(height * sizeof(int *));
for (j = 0; j < height; ++j) {
image[i][j] = (int *) malloc(width * sizeof(int));
}
}

或者我用一维数组做索引运算来模拟3D数据。最后,我释放了必要的内存。我读过在 C++ 中有等效的方法可以做到这一点。我已经看到我可以创建自己的矩阵类,它使用 vector 的 vector (来自 STL)或者我可以使用 boost-matrix 库。问题是这让我的代码看起来臃肿。

我的问题是:

1) 是否有理由不为此目的使用数组?为什么要使用更复杂的数据结构?

2) 我认为我不会利用容器的优势(如我发布的 C++ FAQ lite 链接所示)。有什么我没看到的吗?

3) C++ FAQ lite 提到数组会降低我的工作效率。我真的不明白这如何适用于我的情况。大家怎么看?

最佳答案

如果对两种类型的代码都相当熟悉,那么在更高级别工作总能节省您的时间。它通常更简单,您可能不需要为删除等某些任务费心。

就是说,如果您已经有了 C 代码并且基本上将 malloc 转换为 new(或保持原样),那么保留它是完全合理的.没有理由无缘无故地重复工作。如果您要扩展它并添加更多功能,您可能需要考虑重写。图像处理通常是一个密集的过程,出于性能原因,我一直看到像您这样的直接代码。

数组有目的, vector 有目的,等等。您似乎了解权衡取舍,所以我不会深入探讨。了解您正在做的事情的背景是必要的;任何说数组总是不好的或 vector 总是开销太大(等等)的人可能都不知道他们在说什么。

关于c++ - 在 C++ CT 重建算法中使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462152/

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