C++数据结构以查找多维数组中的相邻值
C++ Data Structure to Find Neighbouring Values in Multidimensional Array
>我有一个项目,我读取了一个具有 1 个或多个维度的数组,对于这个项目,我需要能够快速确定给定元素的邻居。我提前不知道维度,我同样不知道提前知道维度的大小。存储此数据的最佳C++数据结构是什么?一位同事推荐了一个向量向量 . . 的向量,但这似乎非常笨拙。
如果你知道你需要邻居的元素的地址,你能不能做指针算术来找出邻居。例如,如果 p 是元素的位置,则 p-- 是左邻,p++ 是右邻。
将您的多维数组视为一维数组。让数组的维度d1 * d2 * ....* dn
然后为 1D 数组分配内存,例如大小d1 * d2 * ....* dn
A
。例如
int *A = new int[d1 * d2 * ....* dn];
如果需要将数据存储在第 [i1][i2]...[in]
个索引中,请存储在以下索引中:
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)]
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- C++中的可变长度数组/数据结构
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++具有动态分配的字符数组的结构
- 复制 C 样式数组和结构
- 使用选择排序对数组数据结构进行排序,但它不起作用
- 数组数据以错误的方式遍历 Python/Matlab
- 如何填充包含指针数组的结构数组
- 访问 Arduino 中的结构数组数据
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- sizeof(空结构)和sizeof(带有空数组的结构)之间的区别?
- 在能够从 Web 浏览器访问大型数组数据的同时存储它的最可行方法是什么?
- 初始化固定的 C 数组成员结构
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- 将包含数组数据成员的结构保存到文件
- 数据包转换为具有多个动态数组的结构
- 从数组数据中缺少第一个元素的 DLL 返回C++结构
- 实现动态数组数据结构时出现"double free or corruption"错误
- 将字节数组数据映射到c#中的结构体