MFC - CArray
CArrayएक ऐसा संग्रह है जो डेटा के लिए सबसे अच्छा उपयोग किया जाता है जिसे यादृच्छिक या गैर अनुक्रमिक तरीके से एक्सेस किया जाना है। CArray क्लास उन सरणियों का समर्थन करता है जो C सरणियों की तरह हैं, लेकिन गतिशील रूप से सिकुड़ सकते हैं और आवश्यकतानुसार बढ़ सकते हैं।
ऐरे इंडेक्स हमेशा 0 की स्थिति में शुरू होते हैं।
आप तय कर सकते हैं कि ऊपरी बाउंड को ठीक करें या वर्तमान बाउंड के पिछले तत्वों को जोड़ने पर एरे को विस्तारित करने में सक्षम करें।
स्मृति को ऊपरी रूप से ऊपरी तौर पर आवंटित किया जाता है, भले ही कुछ तत्व शून्य हों।
अनु क्रमांक। | नाम और विवरण |
---|---|
1 | Add सरणी के अंत में एक तत्व जोड़ता है; यदि आवश्यक हो तो सरणी बढ़ता है। |
2 | Append सरणी के लिए एक और सरणी जोड़ता है; यदि आवश्यक हो तो सरणी बढ़ता है |
3 | Copy सरणी के लिए एक और सरणी की प्रतिलिपि बनाता है; यदि आवश्यक हो तो सरणी बढ़ता है। |
4 | ElementAt सरणी के भीतर तत्व सूचक के लिए एक अस्थायी संदर्भ देता है। |
5 | FreeExtra वर्तमान अपर बाउंड के ऊपर सभी अप्रयुक्त मेमोरी को हटा देता है। |
6 | GetAt वर्तमान अपर बाउंड के ऊपर सभी अप्रयुक्त मेमोरी को हटा देता है। |
7 | GetCount इस सरणी में तत्वों की संख्या हो जाती है। |
8 | GetData सरणी में तत्वों तक पहुंच की अनुमति देता है। हो सकता हैNULL। |
9 | GetSize इस सरणी में तत्वों की संख्या हो जाती है। |
10 | GetUpperBound सबसे बड़ा वैध सूचकांक लौटाता है। |
1 1 | InsertAt एक निर्दिष्ट सूचकांक में एक तत्व (या किसी अन्य सरणी में सभी तत्व) सम्मिलित करता है। |
12 | IsEmpty निर्धारित करता है कि सरणी खाली है या नहीं। |
13 | RemoveAll इस सरणी से सभी तत्वों को निकालता है। |
14 | RemoveAt एक विशिष्ट सूचकांक पर एक तत्व निकालता है। |
15 | SetAt किसी दिए गए सूचकांक के लिए मूल्य निर्धारित करता है; सरणी को बढ़ने की अनुमति नहीं है। |
16 | SetAtGrow किसी दिए गए सूचकांक के लिए मूल्य निर्धारित करता है; यदि आवश्यक हो तो सरणी बढ़ता है। |
17 | SetSize इस सरणी में शामिल किए जाने वाले तत्वों की संख्या निर्धारित करता है। |
CArray ऑब्जेक्ट्स पर विभिन्न ऑपरेशन निम्नलिखित हैं -
कैरीरे ऑब्जेक्ट बनाएं
CArray मान या ऑब्जेक्ट का संग्रह बनाने के लिए, आपको पहले संग्रह के मानों का प्रकार तय करना होगा। आप नीचे दिखाए गए अनुसार मौजूदा आदिम डेटा प्रकारों में से एक का उपयोग कर सकते हैं जैसे int, CString, डबल आदि;
CArray<CString, CString>strArray;
सामगंरियां जोड़ें
एक आइटम जोड़ने के लिए आप CArray :: Add () फ़ंक्शन का उपयोग कर सकते हैं। यह सरणी के अंत में एक आइटम जोड़ता है। OnInitDialog () में, CArray ऑब्जेक्ट बनाया जाता है और निम्न कोड में दिखाए गए अनुसार तीन नाम जोड़े जाते हैं।
CArray<CString, CString>strArray;
//Add names to CArray
strArray.Add(L"Ali");
strArray.Add(L"Ahmed");
strArray.Add(L"Mark");
आइटम पुनर्प्राप्त करें
किसी भी आइटम को पुनः प्राप्त करने के लिए, आप CArray :: GetAt () फ़ंक्शन का उपयोग कर सकते हैं। यह फ़ंक्शन सरणी के सूचकांक के रूप में एक पूर्णांक पैरामीटर लेता है।
Step 1 - आइए हम एक साधारण उदाहरण देखें, जो सभी नामों को पुनः प्राप्त करेगा।
//Retrive names from CArray
for (int i = 0; i < strArray.GetSize(); i++) {
m_strText.Append(strArray.GetAt(i) + L"\n");
}
Step 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
}
Step 3 - जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो आपको निम्न आउटपुट दिखाई देगा।
मध्य में आइटम जोड़ें
सरणी के बीच में आइटम जोड़ने के लिए आप CArray :: InsertAt () फ़ंक्शन का उपयोग कर सकते हैं। यह दो पैरामर्टर्स लेता है - पहला, सूचकांक और दूसरा, मूल्य।
निम्नलिखित कोड में दिखाए अनुसार इंडेक्स 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
}
जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो आपको निम्न आउटपुट दिखाई देगा। अब आप दूसरे सूचकांक के रूप में एलन नाम को देख सकते हैं।
अद्यतन आइटम मान
सरणी के बीच में आइटम को अपडेट करने के लिए आप CArray ::। SetAt () फ़ंक्शन का उपयोग कर सकते हैं। यह दो पैरामर्टर्स लेता है - पहला, सूचकांक और दूसरा, मूल्य।
निम्न कोड में दिखाए अनुसार सरणी में तीसरे तत्व को अपडेट करते हैं।
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
}
जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो आपको निम्न आउटपुट दिखाई देगा। अब आप देख सकते हैं कि तीसरे तत्व का मान अद्यतन है।
एरे को कॉपी करें
संपूर्ण सरणी को किसी अन्य 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 एन डी सरणी से तत्व को पुनः प्राप्त किया है और आउटपुट समान है क्योंकि हमने कॉपी फ़ंक्शन का उपयोग किया है।
आइटम हटाएँ
किसी विशेष आइटम को हटाने के लिए, आप CArray :: RemoveAt () फ़ंक्शन का उपयोग कर सकते हैं। सूची से सभी तत्व को हटाने के लिए, CArray :: RemoveAll () फ़ंक्शन का उपयोग किया जा सकता है।
आइए एक एरे से दूसरे एलिमेंट को हटाते हैं।
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
}
जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो आपको निम्न आउटपुट दिखाई देगा। अब आप देख सकते हैं कि एलन नाम अब सरणी का हिस्सा नहीं है।