MFC - CArray

CArrayadalah kumpulan yang paling baik digunakan untuk data yang akan diakses secara acak atau tidak berurutan. Kelas CArray mendukung array yang mirip dengan array C, tetapi dapat menyusut dan tumbuh secara dinamis sesuai kebutuhan.

  • Indeks array selalu dimulai dari posisi 0.

  • Anda bisa memutuskan apakah akan memperbaiki batas atas atau mengaktifkan array untuk diperluas saat Anda menambahkan elemen melewati batas saat ini.

  • Memori dialokasikan secara berdekatan ke batas atas, meskipun beberapa elemen bernilai null.

Sr.No. Nama & Deskripsi
1

Add

Menambahkan elemen ke akhir array; menumbuhkan array jika perlu.

2

Append

Menambahkan larik lain ke larik; menumbuhkan array jika perlu

3

Copy

Menyalin larik lain ke larik; menumbuhkan array jika perlu.

4

ElementAt

Mengembalikan referensi sementara ke penunjuk elemen dalam larik.

5

FreeExtra

Membebaskan semua memori yang tidak digunakan di atas batas atas saat ini.

6

GetAt

Membebaskan semua memori yang tidak digunakan di atas batas atas saat ini.

7

GetCount

Mendapat jumlah elemen dalam larik ini.

8

GetData

Memungkinkan akses ke elemen dalam larik. DapatNULL.

9

GetSize

Mendapat jumlah elemen dalam larik ini.

10

GetUpperBound

Mengembalikan indeks valid terbesar.

11

InsertAt

Menyisipkan elemen (atau semua elemen dalam array lain) pada indeks yang ditentukan.

12

IsEmpty

Menentukan apakah larik kosong.

13

RemoveAll

Menghapus semua elemen dari larik ini.

14

RemoveAt

Menghapus elemen pada indeks tertentu.

15

SetAt

Menetapkan nilai untuk indeks tertentu; larik tidak diizinkan untuk tumbuh.

16

SetAtGrow

Menetapkan nilai untuk indeks tertentu; menumbuhkan array jika perlu.

17

SetSize

Menyetel jumlah elemen yang akan dimuat dalam larik ini.

Berikut adalah operasi yang berbeda pada objek CArray -

Buat Objek CArray

Untuk membuat kumpulan nilai atau objek CArray, Anda harus terlebih dahulu memutuskan jenis nilai dari koleksi tersebut. Anda dapat menggunakan salah satu tipe data primitif yang ada seperti int, CString, double dll seperti yang ditunjukkan di bawah ini;

CArray<CString, CString>strArray;

Tambahkan item

Untuk menambahkan item Anda dapat menggunakan fungsi CArray :: Add (). Ia menambahkan item di akhir array. Di OnInitDialog (), objek CArray dibuat dan tiga nama ditambahkan seperti yang ditunjukkan pada kode berikut.

CArray<CString, CString>strArray;

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

Ambil Item

Untuk mengambil item apa pun, Anda bisa menggunakan fungsi CArray :: GetAt (). Fungsi ini mengambil satu parameter integer sebagai indeks dari array.

Step 1 - Mari kita lihat contoh sederhana, yang akan mengambil semua nama.

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

Step 2 - Berikut adalah implementasi lengkap 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
}

Step 3 - Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut.

Tambahkan Item di Tengah

Untuk menambahkan item di tengah array Anda dapat menggunakan fungsi CArray ::. InsertAt (). Dibutuhkan dua parameter - Pertama, indeks dan Kedua, nilainya.

Mari kita masukkan item baru pada indeks 1 seperti yang ditunjukkan pada kode berikut.

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
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut. Anda sekarang dapat melihat nama Allan dded sebagai indeks kedua.

Perbarui Nilai Item

Untuk memperbarui item di tengah larik Anda dapat menggunakan fungsi CArray ::. SetAt (). Dibutuhkan dua parameter - Pertama, indeks dan Kedua, nilainya.

Mari kita perbarui elemen ketiga dalam array seperti yang ditunjukkan pada kode berikut.

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
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut. Anda sekarang dapat melihat bahwa nilai elemen ketiga diperbarui.

Salin Array

Untuk menyalin seluruh larik ke objek CArray lain, Anda dapat menggunakan fungsi CArray :: Copy ().

Step1 - Mari kita buat array lain dan salin semua elemen dari array pertama seperti yang ditunjukkan pada kode berikut.

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
}

Anda sekarang dapat melihat bahwa kami telah diambil elemen dari 2 nd array dan output adalah sama karena kita telah menggunakan fungsi copy.

Hapus Item

Untuk menghapus item tertentu, Anda dapat menggunakan fungsi CArray :: RemoveAt (). Untuk menghapus semua elemen dari daftar, fungsi CArray :: RemoveAll () dapat digunakan.

Mari kita hapus elemen kedua dari sebuah array.

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
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut. Sekarang Anda dapat melihat bahwa nama Allan bukan lagi bagian dari array.