C++ 向量vs 2D数组vs内部带有int*的结构数组。
我正在为Hackerrank做一个编程问题。我已经解决了这个问题,但和任何接受过培训的优秀开发人员一样,我正在寻找有关创建2d数据结构以实现最快代码执行的最佳实践的建议 问题非常简单,要求在二维数组中定义一个形状,并计算该形状的所有引用中的最大值 因此,首先,我没有使用模板中提供的向量,而是使用了二维数组。但是,我接受过一些指针方面的培训,所以我用结构指针制作了一个2d数组,如下所示:C++ 向量vs 2D数组vs内部带有int*的结构数组。,c++,arrays,struct,C++,Arrays,Struct,我正在为Hackerrank做一个编程问题。我已经解决了这个问题,但和任何接受过培训的优秀开发人员一样,我正在寻找有关创建2d数据结构以实现最快代码执行的最佳实践的建议 问题非常简单,要求在二维数组中定义一个形状,并计算该形状的所有引用中的最大值 因此,首先,我没有使用模板中提供的向量,而是使用了二维数组。但是,我接受过一些指针方面的培训,所以我用结构指针制作了一个2d数组,如下所示: 我的解决方案是否比仅使用常规的旧二维阵列更好 如果是这样的话,我甚至不应该为一个大项目付出努力吗 如果不是,我
#include <iostream>
using namespace std;
struct row {
signed int * usePointers;
};
int main() {
int highest = -324;
int next;
row* chart;
chart = new row[6]; //allocate all rows first
for (int arr_i = 0; arr_i < 6; arr_i++) {
chart[arr_i].usePointers = new int[6]; //allocate each column here
for (int arr_j = 0; arr_j < 6; arr_j++) {
chart[arr_i].usePointers[arr_j] = 0; //fill each element here
cin >> chart[arr_i].usePointers[arr_j];
}
}
//create the hourglass (n-3)*(n-3) times
for (int arr_i = 0; arr_i <=3; arr_i++) {
for (int arr_j = 0; arr_j <=3; arr_j++) {
next = 0;
//top
next += chart[arr_i].usePointers[arr_j] +
chart[arr_i].usePointers[arr_j+1] +
chart[arr_i].usePointers[arr_j+2];
//mid
next += chart[arr_i+1].usePointers[arr_j + 1];
//bottom
next += chart[arr_i+2].usePointers[arr_j] +
chart[arr_i+2].usePointers[arr_j + 1] +
chart[arr_i+2].usePointers[arr_j + 2];
if (next > highest)
highest = next;
//cout << chart[arr_i].usePointers[arr_j];
}
}
cout << highest;
free(chart);
return 0;
}
#包括
使用名称空间std;
结构行{
有符号int*usePointers;
};
int main(){
最高整数=-324;
int-next;
行*图;
chart=新行[6];//首先分配所有行
对于(int arr_i=0;arr_i<6;arr_i++){
图表[arr_i].usePointers=new int[6];//在此处分配每一列
对于(int arr_j=0;arr_j<6;arr_j++){
图表[arr_i].usePointers[arr_j]=0;//在此处填充每个元素
cin>>图表[arr_i]。使用指针[arr_j];
}
}
//创建沙漏(n-3)*(n-3)次
对于(int arr_i=0;arr_i如果您只需要一个固定大小的2D数组,那么您可能只需要使用类似于int a[6][8]的东西
并且已经完成了。如果您需要一个动态2D数组,通常更有效的方法是将数组作为一个连续的内存块分配,然后自己执行访问数组元素所需的偏移量计算。与指针数组混在一起可能会很慢,因为数组将位于多个di中不同的内存区域,这将击败CPU缓存算法。如果你的解决方案有效,你最好问这个问题。不要垃圾标签!这显然不是C。那么“新的2D阵列”会是什么呢是吗?我使用了一个c风格的结构,并制作了一个双指针。我认为c开发人员对代码的这一部分很熟悉。而且,你也是线程中唯一一个说“new 2D array”的人,不要滥用引号,因为我搜索了它,所以我可以回答你的问题,但什么也没有找到。