2D阵列和1D阵列存储比较
2d array and 1d array storage comparison?
我有一个问题,理解了C 中的一些阵列。
如果我的数组有3行和4个COLOMN,并且我将它们创建为1D数组,并通过每次循环循环4时访问每个行数据。与2D方法相比,这种方式可以节省我的时间。
所以而不是这样:
int **array = new int * [3];
for(int i = 0; i < 4; i++) {
array[i] = new int [4];
}
我做这个:
int *array = new int [3 * 4];
我以这种方式访问每个行数据:行= 3,colomns = 4:
for(int i = 0;i < 3; i++) {
for(int j = 0;j < (3 * 4); j++) {
cout << "row : << i << " , 4: " array[i * j];
}
}
以这种方式节省了我的程序的时间比2D或否?
是一种不好的方法还是好方法,像我一样在1D数组中扭动我的2D数组?
注意:
我的数组不会动态,在创建它之前,我的数组的大小会知道,我将在我的神经网络项目中使用它。我担心和关注速度是速度。
您可以创建一个矩阵类,如下:
template <typename T, std::size_t R, std::size_t C>
class Matrix
{
public:
const T& get(std::size_t i, std::size_t j) const { return data[i][j]; }
T& get(std::size_t i, std::size_t j) { return data[i][j]; }
private:
T data[R][C] = {};
};
data
是连续的,偏移计算将由编译器完成。
用法将是:
Matrix<int, 3, 4> mat;
mat.get(1, 2) = 42;
如果您的数组不是动态的,则没有区别。两者都将在内存中连续布置。
如果您的数组是动态的,请阅读此答案。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 比较两个std::矢量/阵列,或者通常比较两个stl连续器
- 简单的程序比较阵列运行但给出不正确的结果
- 将动态阵列中的字符与char进行比较
- 比较阵列的更好方法
- TBB免费图像lambda阵列比较错误
- 如何在C/ C 中比较两个char的两个2D阵列
- 比较从文本文件中读取的并行阵列
- 2D阵列和1D阵列存储比较
- 通过使用指针(C )比较阵列中的元素
- 比较阵列相似性的最佳比较算法是什么?
- 整数的阵列比较
- 如何比较两个QString阵列Qt C++
- 比较C 中字符阵列表中的项目
- C 2D char阵列不当比较
- 我是否必须求助于循环,以比较C 中的两个2D阵列
- 一个二维动态阵列的C++剖分与比较
- 多维阵列与平面阵列 - 性能比较
- 将检测到的人脸与现有人脸阵列与 android 中的 opencv 进行比较