1

皆さん、こんにちは。ここでは、オブジェクトを使用して動的配列を処理する方法について、ある程度の経験が必要です。

私はいくつかのオブジェクト「Obj1」、「Obj2」などで構成されるクラス「SA」を持っています...

クラス内には、サイズが長さを設定する次の方法で初期化する動的配列「SA_Array」があります。

double * SA_Array;
SA_Array = new double [size];

ここで、上記のオブジェクトで「=」演算子を使用して、各オブジェクトの配列のコピーを作成しようとしています。残念ながら、ポインターのみをイコライズすることに気付きました。したがって、1 つのオブジェクトで配列を変更すると、すべてのオブジェクト SA_Array が同じように変更されます...基本的に、配列に 1 つのコピーしか残されません。

例: Obj1.SA_Array == Obj2.SA_Array...

これを克服し、SA_Array のオブジェクト固有のコピーを作成する方法について何か良い提案はありますか?

4

2 に答える 2

3

サイズが実行時に決定される場合、最も使いやすいのはベクターです

vector<double> SA_Array(size);

これで、コピー、交換、サイズ変更ができ、それに応じて動作します。先頭へのポインターが必要な場合は、 でそれを行うことができます&SA_Array[0]。コンパイル時にサイズが決定され、固定されている場合は、boost::array を使用できます。

boost::array<double, size> SA_Array;

配列のように使用できますが、コピーSA_Array.begin()してベクターのようなことを行うこともできます。先頭へのポインタが必要な場合は、SA_Array.data()またはで実行できます&SA_Array[0]

あなたのように生のポインターを使用して、手動でコピーする方法があります

double *SA_Array;
SA_Array = new double[size];

double *SA_Copy;
SA_Copy = new double[size];
std::copy(SA_Array, SA_Array + size, SA_Copy);

しかし、それらを覚えておく必要があるため、面倒delete[]です。これはベクトルがすべて行います。

于 2009-03-16T12:50:23.153 に答える
0

などの標準ライブラリ コレクションを使用するかstd::vector<double>、未加工の配列が必要なまれなケースでは、例外の安全性を確保しながらコピー コンストラクターを作成できます。

于 2009-03-16T12:51:10.157 に答える