C++ 向量vs 2D数组vs内部带有int*的结构数组。

C++ 向量vs 2D数组vs内部带有int*的结构数组。,c++,arrays,struct,C++,Arrays,Struct,我正在为Hackerrank做一个编程问题。我已经解决了这个问题,但和任何接受过培训的优秀开发人员一样,我正在寻找有关创建2d数据结构以实现最快代码执行的最佳实践的建议 问题非常简单,要求在二维数组中定义一个形状,并计算该形状的所有引用中的最大值 因此,首先,我没有使用模板中提供的向量,而是使用了二维数组。但是,我接受过一些指针方面的培训,所以我用结构指针制作了一个2d数组,如下所示: 我的解决方案是否比仅使用常规的旧二维阵列更好 如果是这样的话,我甚至不应该为一个大项目付出努力吗 如果不是,我

我正在为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”的人,不要滥用引号,因为我搜索了它,所以我可以回答你的问题,但什么也没有找到。