按照标题,我正在寻找一种使用单个预计算索引来访问2D int数组的方法。
换句话说,我想array[z]
代替array[x][y]
,而将'array'保留为int[][]
有没有一种方法可以将数组转换为一维数组而没有任何开销?
我想避免使用指针(至少在某种意义上*(&array[0][0] + index)
),因为这对性能至关重要,而在我的所有测试中,它们的速度都较慢。(编辑:这是在旧的MSVC编译器上带有一组特定的优化标志-通常不是这种情况。)我还希望避免进行任何算术或函数调用,除非它们比仅以2D格式访问数组更轻巧。
那使用(&arr[0][0])[i * width + j]
??
您是否有理由不想使用指针语法?它并不比索引慢。。或者甚至只是使用1D数组并将其视为2D数组?
#include <iostream>
#include <algorithm>
int main()
{
int arr[5][5];
int n = 0;
std::generate(&arr[0][0], &arr[4][5], [&] {return ++n;});
int* a = &arr[0][0];
std::for_each(&a[0], &a[25], [&](int i){std::cout<<i<<" ";});
/*int* a = &arr[0][0];
for (int i = 0; i < 5; ++i)
for (int j = 0; j < 5; ++j)
std::cout<<a[i * 5 + j]<<" ";*/
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句