Mfc-carray

提供:Dev Guides
移動先:案内検索

MFC-CArray

*CArray* は、ランダムまたは非シーケンシャルな方法でアクセスされるデータに最適なコレクションです。 CArrayクラスは、C配列のような配列をサポートしますが、必要に応じて動的に縮小および拡大できます。
  • 配列インデックスは常に位置0から始まります。
  • 現在の境界を超えて要素を追加するときに、上限を修正するか、配列を展開できるようにするかを決定できます。 *一部の要素がnullであっても、メモリは上限に連続して割り当てられます。

____これはCArrayクラスのメソッドのリストです。

Sr.No. Name & Description
1
  • Add*

配列の最後に要素を追加します。必要に応じて配列を拡大します。

2

Append

別の配列を配列に追加します。必要に応じて配列を拡大します

3

Copy

別の配列を配列にコピーします。必要に応じて配列を拡大します。

4

ElementAt

配列内の要素ポインターへの一時的な参照を返します。

5

FreeExtra

現在の上限を超える未使用のメモリをすべて解放します。

6

GetAt

現在の上限を超える未使用のメモリをすべて解放します。

7

GetCount

この配列内の要素の数を取得します。

8

GetData

配列内の要素へのアクセスを許可します。 NULL にすることができます。

9

GetSize

この配列内の要素の数を取得します。

10

GetUpperBound

最大の有効なインデックスを返します。

11

InsertAt

指定されたインデックスに要素(または別の配列のすべての要素)を挿入します。

12

IsEmpty

配列が空かどうかを判別します。

13

RemoveAll

この配列からすべての要素を削除します。

14

RemoveAt

特定のインデックスの要素を削除します。

15

SetAt

特定のインデックスの値を設定します。配列は拡大できません。

16

SetAtGrow

特定のインデックスの値を設定します。必要に応じて配列を拡大します。

17

SetSize

この配列に含まれる要素の数を設定します。

以下は、CArrayオブジェクトのさまざまな操作です-

CArrayオブジェクトを作成

CArray値またはオブジェクトのコレクションを作成するには、まずコレクションの値のタイプを決定する必要があります。 int、CString、doubleなど、既存のプリミティブデータ型のいずれかを使用できます。 以下に示すように。

CArray<CString, CString>strArray;

アイテムを追加

アイテムを追加するには、CArray
Add()関数を使用できます。 配列の最後にアイテムを追加します。 OnInitDialog()では、CArrayオブジェクトが作成され、次のコードに示すように3つの名前が追加されます。
CArray<CString, CString>strArray;

//Add names to CArray
strArray.Add(L"Ali");
strArray.Add(L"Ahmed");
strArray.Add(L"Mark");

アイテムを取得する

アイテムを取得するには、CArray
GetAt()関数を使用できます。 この関数は、配列のインデックスとして1つの整数パラメーターを取ります。
  • ステップ1 *-すべての名前を取得する簡単な例を見てみましょう。
//Retrive names from CArray
   for (int i = 0; i < strArray.GetSize(); i++) {
      m_strText.Append(strArray.GetAt(i) + L"\n");
   }
*ステップ2 *-CMFCCArrayDlg
OnInitDialog()の完全な実装です。
BOOL CMFCCArrayDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

  //Set the icon for this dialog. The framework does this automatically
  //when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);              //Set big icon
   SetIcon(m_hIcon, FALSE);            //Set small icon

  //TODO: Add extra initialization here
   CArray<CString, CString>strArray;

  //Add names to CArray
   strArray.Add(L"Ali");
   strArray.Add(L"Ahmed");
   strArray.Add(L"Mark");

  //Retrive names from CArray
   for (int i = 0; i < strArray.GetSize(); i++) {
      m_strText.Append(strArray.GetAt(i) + L"\n");
   }

   UpdateData(FALSE);
   return TRUE;//return TRUE unless you set the focus to a control
}
  • ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。

アイテムの取得

中間にアイテムを追加

配列の中央にアイテムを追加するには、CArray ::。InsertAt()関数を使用できます。 これには2つのパラメータが必要です。1つ目はインデックスで、2つ目は値です。

次のコードに示すように、インデックス1に新しいアイテムを挿入しましょう。

BOOL CMFCCArrayDlg::OnInitDialog() {

   CDialogEx::OnInitDialog();

  //Set the icon for this dialog. The framework does this automatically
  //when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);            //Set big icon
   SetIcon(m_hIcon, FALSE);           //Set small icon

  //TODO: Add extra initialization here
   CArray<CString, CString>strArray;
  //Add names to CArray
   strArray.Add(L"Ali");
   strArray.Add(L"Ahmed");
   strArray.Add(L"Mark");

   strArray.InsertAt(1, L"Allan");

  //Retrive names from CArray
   for (int i = 0; i < strArray.GetSize(); i++) {
      m_strText.Append(strArray.GetAt(i) + L"\n");
   }

   UpdateData(FALSE);
   return TRUE;//return TRUE unless you set the focus to a control
}

上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、2番目のインデックスとしてAllan ddedという名前が表示されます。

アイテムの追加

アイテムの値を更新

配列の中央の項目を更新するには、CArray ::。SetAt()関数を使用できます。 これには2つのパラメータが必要です。1つ目はインデックスで、2つ目は値です。

次のコードに示すように、配列の3番目の要素を更新しましょう。

BOOL CMFCCArrayDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

  //Set the icon for this dialog. The framework does this automatically
  //when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);                //Set big icon
   SetIcon(m_hIcon, FALSE);              //Set small icon

  //TODO: Add extra initialization here
   CArray<CString, CString>strArray;

  //Add names to CArray
   strArray.Add(L"Ali");
   strArray.Add(L"Ahmed");
   strArray.Add(L"Mark");

   strArray.InsertAt(1, L"Allan");

   strArray.SetAt(2, L"Salman");

  //Retrive names from CArray
   for (int i = 0; i < strArray.GetSize(); i++) {
      m_strText.Append(strArray.GetAt(i) + L"\n");
   }

   UpdateData(FALSE);
   return TRUE;//return TRUE unless you set the focus to a control
}

上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、3番目の要素の値が更新されていることがわかります。

アイテムの更新

配列をコピー

配列全体を別のCArrayオブジェクトにコピーするには、CArray

Copy()関数を使用できます。

*Step1* -次のコードに示すように、別の配列を作成し、最初の配列からすべての要素をコピーします。
BOOL CMFCCArrayDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

  //Add "About..." menu item to system menu.

  //IDM_ABOUTBOX must be in the system command range.
   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
   ASSERT(IDM_ABOUTBOX < 0xF000);
   CMenu* pSysMenu = GetSystemMenu(FALSE);
   if (pSysMenu != NULL) {
      BOOL bNameValid;
      CString strAboutMenu;
      bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
      ASSERT(bNameValid);
      if (!strAboutMenu.IsEmpty()) {
         pSysMenu→AppendMenu(MF_SEPARATOR);
         pSysMenu→AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      }
   }
  //Set the icon for this dialog. The framework does this automatically
  //when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);              //Set big icon
   SetIcon(m_hIcon, FALSE);             //Set small icon

  //TODO: Add extra initialization here
   CArray<CString, CString>strArray;
  //Add names to CArray
   strArray.Add(L"Ali");
   strArray.Add(L"Ahmed");
   strArray.Add(L"Mark");

   strArray.InsertAt(1, L"Allan");

   strArray.SetAt(2, L"Salman");

   CArray<CString, CString>strArray2;
   strArray2.Copy(strArray);
  //Retrive names from CArray
   for (int i = 0; i < strArray2.GetSize(); i++) {
      m_strText.Append(strArray2.GetAt(i) + L"\n");
   }

   UpdateData(FALSE);
   return TRUE;//return TRUE unless you set the focus to a control
}

これで、2 ^ nd ^配列から要素を取得したことがわかります。コピー関数を使用したため、出力は同じです。

アレイのコピー

アイテムを削除

特定の項目を削除するには、CArray
RemoveAt()関数を使用できます。 リストからすべての要素を削除するには、CArray :: RemoveAll()関数を使用できます。

配列から2番目の要素を削除しましょう。

BOOL CMFCCArrayDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

   SetIcon(m_hIcon, TRUE);            //Set big icon
   SetIcon(m_hIcon, FALSE);           //Set small icon

  //TODO: Add extra initialization here
   CArray<CString, CString>strArray;

  //Add names to CArray
   strArray.Add(L"Ali");
   strArray.Add(L"Ahmed");
   strArray.Add(L"Mark");

   strArray.InsertAt(1, L"Allan");

   strArray.SetAt(2, L"Salman");

   CArray<CString, CString>strArray2;
   strArray2.Copy(strArray);

   strArray2.RemoveAt(1);

  //Retrive names from CArray
   for (int i = 0; i < strArray2.GetSize(); i++) {
      m_strText.Append(strArray2.GetAt(i) + L"\n");
   }

   UpdateData(FALSE);
   return TRUE;//return TRUE unless you set the focus to a control
}

上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、Allanという名前が配列の一部ではなくなっていることがわかります。

アイテムの削除