私はHackerrankのためのプログラミングの問題に取り組んでいます。 https://www.hackerrank.com/challenges/30-2d-arrays。私はすでにこの問題を解決しましたが、優れた開発者のように、最速のコード実行のための2dデータ構造を作成するベストプラクティスのアドバイスを探しています。ベクトル対2D配列vs int *を持つ構造体の配列。
問題は非常に簡単であり、かつ2次元配列内の形状を定義し、その形状のすべてのオカレンスの最大値をカウントするように依頼します。
そこで、最初に、代わりにそれらは、テンプレートに設けられていたようなベクターを用いて、私は2次元配列を使用します。しかし、私はポインタでいくつかの訓練を持っているので、私はこのような構造体のポインタを持つ2次元配列をした:
- は普通の古い2Dアレイを使用してより良い私の解決策ですか?
- もしそうなら、私もさえ大きなプロジェクトのための努力をすべきではありませんか?
- ない場合は、ときに私は(今まで)この種のものを選ぶべきですか?
あなたが唯一の固定サイズの2次元配列が必要な場合は事前
#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;
}
あなたのソリューションが動作する場合、あなたはより良い[codereview.se]でこの質問をすると思います。 – ForceBru
迷惑メールのタグを使わないでください!これは明らかにCではありません。そして、「新しい2D配列」は何ですか? – Olaf
私はCスタイルの構造体を使用し、ダブルポインタを作成しました。私はコードの領域がC開発者にはよく知られていると思った。 また、スレッド内で「新しい2D配列」と言うだけでなく、引用符を乱用しないでください。私はそれを検索したので、あなたの質問に答えて何も見つかりませんでした。 – Crawsome