newকীওয়ার্ডটি ব্যবহার করে সি ++ তে পূর্ণসংখ্যার গতিশীল অ্যারে কীভাবে তৈরি করবেন ?
newকীওয়ার্ডটি ব্যবহার করে সি ++ তে পূর্ণসংখ্যার গতিশীল অ্যারে কীভাবে তৈরি করবেন ?
উত্তর:
int main()
{
int size;
std::cin >> size;
int *array = new int[size];
delete [] array;
return 0;
}
deleteআপনার বরাদ্দ করা প্রতিটি অ্যারে ভুলবেন না new।
deleteআপনার কোডটি ভুল।
সি ++ ১১ যেহেতু, এর একটি নিরাপদ বিকল্প রয়েছে new[]এবং delete[]এটি শূন্য-ওভারহেডের মত নয় std::vector:
std::unique_ptr<int[]> array(new int[size]);
সি ++ 14 এ:
auto array = std::make_unique<int[]>(size);
উপরের উভয়ই একই শিরোলেখ ফাইলটিতে নির্ভর করে, #include <memory>
আপনি স্ট্যান্ডার্ড টেম্পলেট লাইব্রেরি ব্যবহার বিবেচনা করতে চাইতে পারেন। এটি সহজ এবং সহজেই ব্যবহারযোগ্য, এছাড়াও আপনাকে মেমরির বরাদ্দ সম্পর্কে চিন্তা করতে হবে না।
http://www.cplsplus.com/references/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কার্যকর করতে পারেন । মুল বক্তব্যটি আপনি কোনও সংস্থান পরিচালনা করেন না এবং এটি ব্যবহার করেন না, আপনি একটি বা অন্যটি করেন।
new[]প্রতিস্থাপন করা যেতে পারে std::vector। এবং যেহেতু std::vectorরিসোর্স ম্যানেজমেন্ট (এসবিআরএম) থেকে রিসোর্স ম্যানেজমেন্টকে সঠিকভাবে পৃথক করে, আমাদের এটি করা উচিত।
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>। এবং একটি বই ।