如果在debug得到的结果会不一样,可能两者速度差不多,甚至二维的速度还会快一截
当然是在release 和开O2的情况下测试在连续下标访问下是一维数组完胜,大概一维比二维的速度在2:3左右
在随机数生成的下标访问也是一维数组加上指针偏移量完胜,本地测试平均结果是
two dim:1153
one dim:1032
#include<iostream>
#include<ctime>
#include<random>
using namespace std;
const int N = 1e4;
const int M = N * N;
int main() {
srand(time(NULL));
cout <<rand()<< endl;
int** a = new int*[N];
for (int i = 0; i < N; i++) {
a[i] = new int[N];
}
int s = clock();
for (int i = 0; i < N;i++) {
for (int j = 0; j < N; j++) {
a[rand() % N][i] = i + j;
}
}
int e = clock();
cout << "two dim:" << e - s << endl;
for (int i = 0; i < N; i++) {
delete[] a[i];
}
delete[] a;
int* b = new int[M];
s = clock();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
b[N * (rand()%N) + i] = i + j;
}
}
e = clock();
cout << "one dim:" << e - s << endl;;
delete[] b;
}
所以表示矩阵多用一维数组