newकीवर्ड का उपयोग करके C ++ में पूर्णांक का डायनामिक ऐरे कैसे बनाएं ?
newकीवर्ड का उपयोग करके C ++ में पूर्णांक का डायनामिक ऐरे कैसे बनाएं ?
जवाबों:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
deleteआपके द्वारा आवंटित हर ऐरे को मत भूलना new।
delete, तो आपका कोड गलत है।
C ++ 11 के बाद से, वहाँ एक सुरक्षित विकल्प है new[]और delete[]जो इसके विपरीत शून्य-ओवरहेड है std::vector:
std::unique_ptr<int[]> array(new int[size]);
C ++ 14 में:
auto array = std::make_unique<int[]>(size);
उपरोक्त दोनों एक ही हेडर फ़ाइल पर निर्भर करते हैं, #include <memory>
आप मानक टेम्पलेट लाइब्रेरी का उपयोग करने पर विचार कर सकते हैं। यह सरल और उपयोग करने में आसान है, साथ ही आपको मेमोरी आवंटन के बारे में चिंता करने की आवश्यकता नहीं है।
http://www.cplusplus.com/reference/stl/vector/vector/
int size = 5; // declare the size of the vector
vector<int> myvector(size, 0); // create a vector to hold "size" int's
// all initialized to zero
myvector[0] = 1234; // assign values like a c++ array
std::vectorउपयुक्त निर्माणकर्ता वास्तव में अच्छी तरह से काम करता है और इसे एक विकल्प के रूप में इंगित किया जाना चाहिए। कभी-कभी लोग प्रश्न को खराब तरीके से पूछते हैं, और यह उन मामलों में से एक के रूप में गिना जा सकता है - यह बहुत संक्षिप्त है और पसंद करने के लिए कोई तर्क नहीं देता है new।
new[]इसके बजाय उपयोग करने का कोई कारण नहीं है std::vector।
deleteकभी भी, किसी भी चीज़ की आवश्यकता नहीं होनी चाहिए । इसके अलावा, std::vectorएक गतिशील सरणी है, और लिंक की गई सूची के साथ कुछ भी नहीं करता है। यह स्मृति का एक हिस्सा है।
newऔर deleteरैपर लागू करते हैं। मुद्दा यह है कि आप एक संसाधन का प्रबंधन नहीं करते हैं और इसका उपयोग करते हैं, आप एक या दूसरे को करते हैं।
int* array = new int[size];
std::vector::data()जब आवश्यक हो तो सदस्य फ़ंक्शन अंतर्निहित कच्चे सरणी को वापस कर देगा।
operator&बजाय उपयोग करेंगे data(), लेकिन यह सच है कि एक वेक्टर एरेज़ की गारंटी देता है जो एरे की अपेक्षा कार्यों के साथ संगतता के लिए आवश्यक है।
जैसे ही प्रश्न डायनेमिक एरे के बारे में होता है, आप न केवल वेरिएबल साइज के साथ एरे बनाना चाहते हैं, बल्कि रनटाइम के दौरान इसका आकार बदलना भी चाहते हैं। यहाँ एक उदाहरण है memcpy, आप उपयोग कर सकते हैं memcpy_sया std::copyसाथ ही। संकलक के आधार पर, <memory.h>या <string.h>आवश्यकता हो सकती है। इस फ़ंक्शन का उपयोग करते समय आप नए मेमोरी क्षेत्र आवंटित करते हैं, मूल मेमोरी क्षेत्रों के मूल्यों को कॉपी करें और फिर उन्हें जारी करें।
// create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];
// now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];
/*
somehow set values to given arrays
*/
// add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
आप इसके बजाय निरंतर 4 का उपयोग कर सकते हैं sizeof(int)।
गतिशील रूप से कुछ मेमोरी आवंटित करें new:
int* array = new int[SIZE];
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
float arr[2095879];
long k,i;
char ch[100];
k=0;
do{
cin>>ch;
arr[k]=atof(ch);
k++;
}while(ch[0]=='0');
cout<<"Array output"<<endl;
for(i=0;i<k;i++){
cout<<arr[i]<<endl;
}
return 0;
}
उपरोक्त कोड काम करता है, अधिकतम फ्लोट या इंट सरणी आकार जिसे परिभाषित किया जा सकता है, आकार 2095879 के साथ था, और बाहर निकलने की स्थिति गैर शून्य शुरुआत इनपुट संख्या होगी
std::vector<int>। और एक किताब ।