【解決方法】C++ のユーザー定義型の 3D 行列で、サイズはユーザー入力によって定義されます


ユーザー定義タイプのオブジェクトの 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を指定していました。

コメント

タイトルとURLをコピーしました