gpt4 book ai didi

C++ - 一个 3-d 数据结构 - 我应该使用指针 vector 还是 vector vector ?

转载 作者:行者123 更新时间:2023-11-30 01:46:45 26 4
gpt4 key购买 nike

我必须维护一个 3 维的数据结构。所以让我们说它的尺寸是:- l x m x n。在我希望编写的程序中,l 和 m 将在构造数据结构时已知。但是 n 在整个运行时必须是动态的。对于网格 lxm 中的不同 vector ,n 可能不同。 (一旦创建了这个结构,我就永远不会破坏它,因为我将始终需要它)。

现在让我们假设它是我想要制作的二维数据结构,我应该制作 vector > 还是 vector *> ?我也知道在第一种情况下如何将 vector 初始化为所需的大小,即我可能会做类似的事情:-

vector<vector<int> > A(m)

将外部维度的大小初始化为m。但在第二种情况下,一旦我创建了一个指向 vector 的指针 vector ,我该如何创建指针指向的 vector 。

将这个带到 3-d 案例中,我应该使用 ,vector > 或 vector > 或其他组合?

请提出任何更改建议,以便我可以在问题框架不正确的情况下重新设计问题。

最佳答案

您最好使用单个 vector(而不是嵌套的),因为在这种情况下内存保证是连续的,并且由于没有缓存未命中,您的代码会更快。在这种情况下,您需要从 3D (2D) 映射到 1D,反之亦然,但这非常简单

对于二维:

(x,y) <-> y*DIM_X + x;

对于 3D:

(x,y,z) <-> z*(DIM_Y*DIM_X) + y*DIM_X + x;

如果你真的坚持使用嵌套 vector ,你可以这样做:

#include <vector>

template<typename T>
using vec = std::vector<T>; // to save some typing

int main()
{
// creates a 5 x 4 x 3 vector of vector of vector
vec<vec<vec<double>>> v{5, vec<vec<double>>{4, vec<double>{3}}};
}

编辑

响应您最近的编辑:使用

std::vector<std::vector<double>> v{DIM_X*DIM_Y, std::vector<double>};
// address (x,y,z)
v[y*DIM_X+x, z] = val_x_y_z;

如果您进一步碰巧知道内部 vector 的维度,您可以使用 std::vector::reserve 为它们预分配内存。 .这将加快速度,因为不会有任何(缓慢的)重新分配。

关于C++ - 一个 3-d 数据结构 - 我应该使用指针 vector 还是 vector vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32675130/

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