向量与2D数组对比具有int *内部的结构数组。

时间:2017-02-25 17:02:23

标签: c++ arrays struct

我正在为Hackerrank编写一个编程问题。 https://www.hackerrank.com/challenges/30-2d-arrays。我已经解决了这个问题,但是就像任何一个好的开发人员一样,我正在寻找有关为最快的代码执行创建二维数据结构的最佳实践的建议。

问题非常简单,并要求在二维数组中定义一个形状,并计算该形状所有出现的最高值。

因此,首先,我使用的是二维数组,而不是使用模板中提供的向量。但是,我有一些指针训练,所以我用这样的结构指针创建了一个2d数组:

  1. 我的解决方案比使用普通的旧二维阵列更好吗?
  2. 如果是这样,我甚至不应该为一个大项目付出努力?
  3. 如果没有,我什么时候应该选择这种东西?
  4. 提前致谢

    #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;
    }
    

1 个答案:

答案 0 :(得分:1)

如果您只需要一个固定大小的2D数组,那么您应该只使用像int a[6][8]这样的东西并完成它。如果需要动态2D数组,通常将数组分配为一个连续的内存块然后执行自己访问数组元素所需的偏移计算会更有效。搞乱指针数组可能会很慢,因为数组将位于多个不同的内存区域,这将打败CPU缓存算法。