[ad_1]
ユーザー定義タイプのオブジェクトの 3D マトリックスを作成しようとしており、マトリックスの次元を入力するために使用します
私が試したこと:
私は 3D 配列を試しました。これはユーザー定義型を使用する問題を解決しますが、ユーザーがサイズを入力することはできません。
ベクトルを使用しようとしましたが、ユーザー定義型を使用できませんでした
私のユーザー定義型は
クラス spin_cite
{
公衆:
int 値;
int x;
int y;
int z;
ブールチェック;
spin_cite(int X, int Y, int Z, int VAL, bool CHECK)
{
x = X;
と = AND;
z = Z;
ヴァル=ヴァル;
チェック = チェック;
}
};
メイン メソッドの前にグローバル スコープで 3D マトリックスを宣言し、メイン メソッド内で、ユーザー入力を使用して 3D マトリックスを初期化し、値を割り当てたい
私は C# でこれを簡単に行うことができましたが、私の C# コードでは十分ではありません。そのため、C++ でこれを実行しようとしています。
解決策 2
vector
例えば。:
#include <iostream> #include <vector> using namespace std; class spin_cite { public: spin_cite() {} int val; int x; int y; int z; bool check; spin_cite(int X, int Y, int Z, int VAL, bool CHECK) { x = X; y = Y; z = Z; val = VAL; check = CHECK; } }; using elem = vector<spin_cite>; using elem_arr = vector<elem>; vector<elem_arr> a; int main() { cout << "Set dims like: x,y,z" << endl; short x = 0, y = 0, z = 0; ((cin >> x).ignore(1, ',') >> y).ignore(1, ',') >> z; cout << "alloc a 3d array: " << x << ',' << y << ',' << z << endl; for (short ix = 0; ix < x; ++ix) { elem_arr ea(y); for (int iy = 0; iy < y; ++iy) { elem e(z); for (int iz = 0; iz < z; ++iz) { // access every unit's members e[iz].x = 1; e[iz].y = 1; e[iz].z = 1; e[iz].val = 1; e[iz].check = 1; } ea[iy] = std::move(e); } a.push_back(std::move(ea)); } cout << "a.size == " << a.size() << ", a[0].size == " << a[0].size() << ", a[0][0].size== " << a[0][0].size() << endl; return 0; }
解決策 1
での以前の質問ですでに回答が与えられています。 C で 3D 行列を割り当てる[^]. 同じ質問を再投稿しないでください。
解決策 3
リチャードは正しいです。答えはほとんど以前に与えられました。 これは、ユーザー定義型を使用してテンプレート関数に簡単に適合させることができます。 使うのが一番でしょう new
マクロの代わりに、次にリリース機能で delete
ユーザーのタイプに対応するために使用する必要があります。
その方法が本当にわからない場合は、(ここで)お知らせください。お手伝いします。
ちなみに、本来ならC++で書くつもりだったのですが、あなたはCを指定していました。
[ad_2]
コメント