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.