1

我有一个项目,我在其中读取具有 1 个或多个维度的数组,对于这个项目,我需要能够快速确定给定元素的邻居。我不提前知道维度,我同样不提前知道维度的大小。存储这些数据的最佳 C++ 数据结构是什么?一位同事推荐了一个向量的向量。. .,但这似乎非常笨拙。

4

2 回答 2

1

如果您知道需要邻居的元素的地址,您是否可以通过指针运算来找出邻居。例如,如果 p 是元素的位置,则 p-- 是左邻居, p++ 是右邻居。

于 2013-09-27T15:36:42.450 回答
0

将您的多维数组视为一维数组。设数组的维数为d1 * d2 * ....* dn

然后为一维数组分配内存 ,比如Asize d1 * d2 * ....* dn。例如,

int *A = new int[d1 * d2 * ....* dn];

如果需要将数据存储在第[i1][i2]...[in]th 索引中,则存储在以下索引中:

A[i1 * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + in] 

相邻元素将是:

A[(i1 + 1) * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + in] 
A[(i1 - 1) * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + in] 

A[i1 * (d2*d3*d4.. *dn) + (i2 + 1) * (d3*d4*....dn) + ..... + in] 
A[i1 * (d2*d3*d4.. *dn) + (i2 - 1) * (d3*d4*....dn) + ..... + in] 

.............................
A[i1 * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + (in + 1)] 
A[i1 * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + (in - 1)] 
于 2013-09-27T15:45:48.163 回答