MFC - CArray
CArrayrastgele veya sıralı olmayan bir şekilde erişilecek veriler için en iyi kullanılan bir koleksiyondur. CArray sınıfı, C dizilerine benzeyen dizileri destekler, ancak gerektiğinde dinamik olarak küçülüp büyüyebilir.
Dizi dizinleri her zaman 0 konumunda başlar.
Geçerli sınırın ötesine öğeler eklediğinizde üst sınırı düzeltip düzeltmeyeceğinize veya dizinin genişlemesini etkinleştirip etkinleştirmeyeceğinize karar verebilirsiniz.
Bellek, bazı öğeler boş olsa bile, bitişik olarak üst sınıra tahsis edilir.
Sr.No. | İsim & Açıklama |
---|---|
1 | Add Dizinin sonuna bir öğe ekler; gerekirse diziyi büyütür. |
2 | Append Diziye başka bir dizi ekler; gerekirse diziyi büyütür |
3 | Copy Diziye başka bir diziyi kopyalar; gerekirse diziyi büyütür. |
4 | ElementAt Dizi içindeki öğe işaretçisine geçici bir başvuru döndürür. |
5 | FreeExtra Geçerli üst sınırın üzerindeki tüm kullanılmayan belleği boşaltır. |
6 | GetAt Geçerli üst sınırın üzerindeki tüm kullanılmayan belleği boşaltır. |
7 | GetCount Bu dizideki elemanların sayısını alır. |
8 | GetData Dizideki öğelere erişime izin verir. OlabilirNULL. |
9 | GetSize Bu dizideki elemanların sayısını alır. |
10 | GetUpperBound Geçerli en büyük dizini döndürür. |
11 | InsertAt Belirtilen dizine bir öğe (veya başka bir dizideki tüm öğeleri) ekler. |
12 | IsEmpty Dizinin boş olup olmadığını belirler. |
13 | RemoveAll Bu dizideki tüm öğeleri kaldırır. |
14 | RemoveAt Belirli bir dizindeki bir öğeyi kaldırır. |
15 | SetAt Belirli bir dizin için değeri ayarlar; dizinin büyümesine izin verilmiyor. |
16 | SetAtGrow Belirli bir dizin için değeri ayarlar; gerekirse diziyi büyütür. |
17 | SetSize Bu dizide yer alacak elemanların sayısını ayarlar. |
Aşağıda CArray nesnelerindeki farklı işlemler verilmiştir -
CArray Nesnesi Oluşturun
CArray değerleri veya nesnelerinden oluşan bir koleksiyon oluşturmak için, önce koleksiyonun değerlerinin türüne karar vermelisiniz. İnt, CString, double vb. Gibi mevcut ilkel veri türlerinden birini aşağıda gösterildiği gibi kullanabilirsiniz;
CArray<CString, CString>strArray;
Öğe Ekle
Bir öğe eklemek için CArray :: Add () işlevini kullanabilirsiniz. Dizinin sonuna bir öğe ekler. OnInitDialog () içinde, CArray nesnesi oluşturulur ve aşağıdaki kodda gösterildiği gibi üç ad eklenir.
CArray<CString, CString>strArray;
//Add names to CArray
strArray.Add(L"Ali");
strArray.Add(L"Ahmed");
strArray.Add(L"Mark");
Öğeleri Al
Herhangi bir öğeyi geri almak için CArray :: GetAt () işlevini kullanabilirsiniz. Bu işlev, dizinin dizini olarak bir tamsayı parametresi alır.
Step 1 - Tüm isimleri alacak basit bir örneğe bakalım.
//Retrive names from CArray
for (int i = 0; i < strArray.GetSize(); i++) {
m_strText.Append(strArray.GetAt(i) + L"\n");
}
Step 2 - İşte CMFCCArrayDlg :: OnInitDialog () 'un tam uygulaması
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 - Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki çıktıyı göreceksiniz.
Ortadaki Öğeleri Ekle
Dizinin ortasına öğe eklemek için CArray ::. InsertAt () işlevini kullanabilirsiniz. İki parametre alır - Birincisi, indeks ve İkincisi, değer.
Aşağıdaki kodda gösterildiği gibi dizin 1'e yeni bir öğe ekleyelim.
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
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki çıktıyı göreceksiniz. Artık Allan adını ikinci dizin olarak görebilirsiniz.
Öğe Değerini Güncelleyin
Dizinin ortasındaki öğeyi güncellemek için CArray ::. SetAt () işlevini kullanabilirsiniz. İki parametre alır - Birincisi, indeks ve İkincisi, değer.
Aşağıdaki kodda gösterildiği gibi dizideki üçüncü elemanı güncelleyelim.
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
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki çıktıyı göreceksiniz. Artık üçüncü elemanın değerinin güncellendiğini görebilirsiniz.
Diziyi Kopyala
Dizinin tamamını başka bir CArray nesnesine kopyalamak için CArray :: Copy () işlevini kullanabilirsiniz.
Step1 - Başka bir dizi oluşturalım ve aşağıdaki kodda gösterildiği gibi ilk dizideki tüm elemanları kopyalayalım.
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
}
Şimdi 2. diziden eleman elde ettiğimizi görebilirsiniz ve kopya fonksiyonunu kullandığımız için çıktının aynı olduğunu görebilirsiniz.
Öğeleri kaldır
Belirli bir öğeyi kaldırmak için CArray :: RemoveAt () işlevini kullanabilirsiniz. Listeden tüm elemanı kaldırmak için CArray :: RemoveAll () işlevi kullanılabilir.
İkinci elemanı bir diziden çıkaralım.
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
}
Yukarıdaki kod derlendiğinde ve çalıştırıldığında, aşağıdaki çıktıyı göreceksiniz. Artık Allan adının artık dizinin bir parçası olmadığını görebilirsiniz.