mfc

CArray là một bộ sưu tập được sử dụng tốt nhất cho dữ liệu được truy cập theo cách ngẫu nhiên hoặc không tuần tự. Lớp CArray hỗ trợ các mảng giống như mảng C, nhưng có thể tự động thu nhỏ và phát triển khi cần thiết.

  • Chỉ mục mảng luôn bắt đầu ở vị trí 0.
  • Bạn có thể quyết định sửa giới hạn trên hay cho phép mở rộng mảng khi bạn thêm các phần tử vượt qua giới hạn hiện tại.
  • Bộ nhớ được phân bổ liền kề với giới hạn trên, ngay cả khi một số phần tử là null.

Dưới đây là danh sách các phương thức của lớp CArray.

Sau đây là các thao tác khác nhau trên các đối tượng CArray –

To đối tượng CArray

Để tạo một bộ sưu tập các giá trị hoặc đối tượng CArray, trước tiên bạn phải quyết định loại giá trị của bộ sưu tập. Bạn có thể sử dụng một trong các kiểu dữ liệu nguyên thủy hiện có như int, CString, double, v.v. như hình bên dưới;

CArray<CString, CString>strArray;

Thêm các mc

Để thêm một mục, bạn có thể sử dụng hàm CArray::Add(). Nó thêm một mục vào cuối mảng. Trong OnInitDialog(), đối tượng CArray được tạo và ba tên được thêm vào như minh họa trong đoạn mã sau.

CArray<CString, CString>strArray;

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

Ly vt phm

Để truy xuất bất kỳ mục nào, bạn có thể sử dụng hàm CArray::GetAt(). Hàm này lấy một tham số nguyên làm chỉ mục của mảng.

Bước 1 – Chúng ta hãy xem một ví dụ đơn giản, ví dụ này sẽ truy xuất tất cả các tên.

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

Bước 2 – Đây là triển khai hoàn chỉnh của 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
}

Bước 3 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau.

mfc

Thêm các mc gia

Để thêm mục vào giữa mảng, bạn có thể sử dụng hàm CArray::.InsertAt(). Phải mất hai tham số – Thứ nhất, chỉ mục và Thứ hai, giá trị.

Hãy để chúng tôi chèn một mục mới vào chỉ mục 1 như trong đoạn mã sau.

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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau. Bây giờ bạn có thể thấy tên Allan được thêm vào làm chỉ mục thứ hai.

mfc

Cp nht giá tr mt hàng

Để cập nhật mục ở giữa mảng, bạn có thể sử dụng hàm CArray::.SetAt(). Phải mất hai tham số – Thứ nhất, chỉ mục và Thứ hai, giá trị.

Hãy để chúng tôi cập nhật phần tử thứ ba trong mảng như trong đoạn mã sau.

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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau. Bây giờ bạn có thể thấy rằng giá trị của phần tử thứ ba đã được cập nhật.

mfc

Sao chép mng

Để sao chép toàn bộ mảng vào một đối tượng CArray khác, bạn có thể sử dụng hàm CArray::Copy().

Bước 1 – Hãy để chúng tôi tạo một mảng khác và sao chép tất cả các phần tử từ mảng đầu tiên như trong đoạn mã sau.

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
}

Bây giờ bạn có thể thấy rằng chúng tôi đã truy xuất phần tử từ mảng thứ 2 và đầu ra giống nhau vì chúng tôi đã sử dụng chức năng sao chép.

mfc

Xóa mc

Để xóa bất kỳ mục cụ thể nào, bạn có thể sử dụng hàm CArray::RemoveAt(). Để xóa tất cả phần tử khỏi danh sách, có thể sử dụng hàm CArray::RemoveAll().

Hãy để chúng tôi xóa phần tử thứ hai khỏi một mảng.

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
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau. Bây giờ bạn có thể thấy rằng tên Allan không còn là một phần của mảng nữa.

mfc

MFC – Danh sách được liên kết (xem thêm)

Để lại một bình luận