二维数组和一维数组存储比较?
2d array and 1d array storage comparison?
我在理解 C++ 中数组的一些事情时遇到了问题。
如果我有包含 3 行和 4 列的数组,我将它们创建为一维数组,并通过每次 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];
我以这种方式访问每一行数据:rows = 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 更节省我的程序时间?
像我那样在一维数组中旋转我的二维数组是一个坏方法还是一个好方法?
注意:
我的数组不会是动态的,我的数组的大小在创建之前就知道了,我将在我的神经网络项目中使用它。我的担忧和重点是速度。
如果您的数组不是动态的,则没有区别。两者都将在内存中连续布局。
如果您的数组是动态的,那么 read this answer。
您可以创建矩阵 class 如下:
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;
我在理解 C++ 中数组的一些事情时遇到了问题。
如果我有包含 3 行和 4 列的数组,我将它们创建为一维数组,并通过每次 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];
我以这种方式访问每一行数据:rows = 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 更节省我的程序时间?
像我那样在一维数组中旋转我的二维数组是一个坏方法还是一个好方法?
注意:
我的数组不会是动态的,我的数组的大小在创建之前就知道了,我将在我的神经网络项目中使用它。我的担忧和重点是速度。
如果您的数组不是动态的,则没有区别。两者都将在内存中连续布局。
如果您的数组是动态的,那么 read this answer。
您可以创建矩阵 class 如下:
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;