c++ - 具有 2 个未知大小和 1 个已知大小的 3D vector

标签 c++ visual-studio vector

我的程序接收 2 个维度作为命令行参数(M 为宽度,N 为高度)。只要 M 和 N 在 [3-10000] 之间,我就必须处理任何维度。

我想计算矩阵中的值(由 3D vector 表示),但我想保留以前的值来计算新值(这就是为什么一维只有 2 维:0=旧,1=新)。

这将给我一个类似matrix[M][N][2]matrix[2][M][N] 的结构。我没有偏好(以更简单的为准,可能是后者)。

因为 M 和 N 只在运行时才知道,所以我不能使用简单的数组(我可以使用 double ***arr 但我不想弄乱内存分配)

我应该为 3 个维度中的每一个都使用一个 vector ,还是只为那些未知的维度使用 vector ?换句话说,我是否应该对 0=old、1=new 使用简单数组,对 M 和 N 使用 vector ?

无论选择哪个,我都在努力让它发挥作用。如何创建和初始化它?

最佳答案

Should I use a vector for each of the 3 dimensions?

是的,你应该。

当标准库为您提供功能时,编写您自己的内存分配和释放代码没有任何优势。

Whichever is chosen, I am struggling to make it work, how do I create and initialize it?

假设您已经弄清楚如何从命令行获取 MN,您可以使用:

std::vector<int> d1(N, 0);
std::vector<std::vector<int>> d2(M, d1);
std::vector<std::vector<std::vector<int>>> matrix(2, d2);

您也可以将其合并为一行:

std::vector<std::vector<std::vector<int>>> matrix(2, std::vector<std::vector<int>>(M, std::vector<int>(N, 0)));

我更喜欢第一种方法。更容易了解正在做什么。

关于c++ - 具有 2 个未知大小和 1 个已知大小的 3D vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419995/

相关文章:

java - 有什么 RAD 可以与 VCL 相媲美吗?

c++ - 如何将 Qt 集成到现有的应用程序开发工作流程中?

c# - 为 Azure Functions 创建测试项目

c++ - 展平 n 维 vector

r - 如何在 R 中循环的最后一个元素之后追加到列表?

c++ - 删除字符串 vector 中的重复字符串

c++ - C++ 中的霍纳法则

使用 `new char[size]` 进行任意数据的内存分配和释放的 C++ 安全性

c++ - 实现 memcmp

c# - InjectTouchInput Windows 8 C# 不工作(返回 false)