CLKing31 ----- C ++でのCArray動的配列の使用

CArrayは、任意のデータ型を格納できる複雑な配列構造であり、配列の動的管理を実現できます。メモリ内のアドレス割り当ては継続的であるため、プログラムの効率を向上させることができます。一般的に使用される変数タイプもMFCで提供され、CByteArray、CWordArray、CUIntArray、CDWrodArray、CStringArray、CobArray、CPtrArrayとして定義されます。

(1)配列クラステンプレートを使用して、CPointタイプの配列クラスを定義します。次に例を示します。

CArray <CPoint、CPoint&> m_Array;このステートメントはCArray配列オブジェクトを定義します。テンプレートクラスCArrayには2つのパラメーターがあります。1つ目は配列要素の型で、2つ目はパラメーターの参照型です。通常は2つの選択肢があります。 、oneと一人称は同じパラメータタイプを持っています。つまり、配列オブジェクトがパラメータとして渡されると、配列オブジェクトが渡されます。2番目のオプションは、最初のパラメータータイプの参照です。これは、配列オブジェクトがパラメーターとして渡されるときに、配列オブジェクトへのポインターが渡されることを意味します。

(2)配列のサイズを設定します。

一般的に、配列クラスを使用する場合は、SetSize関数を使用して配列のサイズを設定し、メモリスペースを適用するのが最適です。例えば:

m_Array.SetSize(0、1);配列のサイズを設定し、最初のパラメーターは配列のサイズを設定し、2番目のパラメーターは配列が大きくなるときのメモリ割り当てのサイズを設定します。デフォルト値は-1で、デフォルト値は-1です。デフォルト値を使用できますメモリ割り当てがより合理的であることを確認してください。この例では1です。これは、配列要素を追加すると、配列が使用するメモリの1要素が割り当てられることを意味します。最初のパラメーターの値が配列内のメンバーの数よりも小さい場合、最初のパラメーターの値よりも大きいメンバーは切り捨てられ、対応するメモリーが解放されます。

(3)配列のサイズを取得します。

CArrayクラスのGetSize関数を使用して、配列のサイズを取得できます。次に例を示します。intnSize = m_Array.GetUpperBound();配列の値は0から始まるため、その値はGetSizeによって取得される値より1小さくなります。 () 関数。GetUpperBound()が-1を返す場合は、配列に要素がないことを意味します。

(4)一般的に使用されるCArray配列クラスのメンバー関数。

<!-@ font-face {font-family:宋体; パノース-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @ font-face {font-family: "@宋体"; パノース-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} p.MsoNormal、li.MsoNormal、div.MsoNormal {mso-style-parent: ""; マージン:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family: "Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; マージン:72.0pt90。0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} @list l0 {mso-list-id:188422189; mso-list-type:hybrid; mso-list-template-ids:-1420382390 2110408390 1228049680 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-text:%1、; mso-level-tab-stop:18.0pt; mso-level-number-; マージン左:18.0pt; テキストインデント:-18.0pt; color:windowtext;} @list l0:level2 {mso-level-text:(%2); mso-level-tab-stop:57.0pt; mso-level-number-; マージン左:57.0pt; text-indent:-36.0pt;} @list l1 {mso-list-id:1260716413; mso-list-type:hybrid; mso-list-template-ids:1725736636 -1357092342 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-text:%1、; mso-level-tab-stop:18.0pt; mso-level-number-; マージン左:18.0pt; テキストインデント:

追加

配列の最後に配列要素を追加します。

GetSize

配列に含まれる要素の数を取得します。

すべて削除する

数直線のすべての要素を削除します。

GetAt

配列内の指定された位置の値を取得します。

int CArray <TYPE、ARG_TYPE> :: Add(ARG_TYPE newElement

Add関数で使用されるパラメーターは、テンプレートパラメーターの2つのパラメーターです。つまり、このパラメーターのタイプはユーザーによって決定されます。ObjectまたはObject&を使用できます。C ++に精通している

私の友人は皆、引用を渡す効率が高いことを知っています。値で渡されると、スタック上に新しいオブジェクトが生成され、時間がかかります。


以下のAdd関数のコードを分析してみましょう。

template <class TYPE、class ARG_TYPE>

AFX_INLINE int CArray <TYPE、ARG_TYPE> :: Add(ARG_TYPE newElement)

{{

 int nIndex = m_nSize;

 SetAtGrow(nIndex、newElement);

 nIndexを返します。 

}


実際には、SetAtGrow関数を介してこの関数を実行し、その役割は、指定された要素の値を設定することです。SetAtGrowのコードは次のとおりです。

template <class TYPE、class ARG_TYPE>

void CArray <TYPE、ARG_TYPE> :: SetAtGrow(int nIndex、ARG_TYPE newElement)

{{

 if(nIndex> = m_nSize)

  SetSize(nIndex + 1、-1);

 m_pData [nIndex] = newElement;

}


SetAtGrowの実装も非常に簡単です。指定された要素がすでに存在する場合、指定された要素の値が変更されます。指定された要素が存在しない場合、つまりnIndex> =
————————————————
著作権表示:この記事は、CCに続くCSDNブロガー「tanshaojun」の元の記事です。 4.0 BY-SA著作権契約、転載のために元のソースとこのステートメントへのリンクを添付してください。
元のリンク:https://blog.csdn.net/tanshaojun/article/details/4370302

おすすめ

転載: blog.csdn.net/qq_43662480/article/details/114471566