ডায়নামিক অ্যারে হলো এমন একটি অ্যারে, যার আকার প্রোগ্রাম চলাকালীন সময়ে নির্ধারণ করা যায় এবং প্রয়োজন অনুসারে অ্যারের আকার পরিবর্তন করা যায়। C++ এ ডায়নামিক অ্যারে তৈরি করার জন্য new এবং delete অপারেটর ব্যবহার করা হয়।
কেন ডায়নামিক অ্যারে ব্যবহার করা হয়?
- প্রোগ্রাম চলাকালীন আকার নির্ধারণ: সাধারণ অ্যারে ব্যবহারের সময় আকার স্থিরভাবে নির্ধারণ করতে হয়, যা পরবর্তীতে পরিবর্তন করা যায় না। ডায়নামিক অ্যারে ব্যবহার করলে প্রোগ্রাম চলাকালীন সময়ে আকার নির্ধারণ ও পরিবর্তন করা যায়।
- মেমোরি সাশ্রয়ী: প্রয়োজন অনুযায়ী মেমোরি বরাদ্দ করে, যা অপ্রয়োজনীয় মেমোরি অপচয় এড়ায়।
ডায়নামিক অ্যারে তৈরি করা
C++ এ new অপারেটর ব্যবহার করে ডায়নামিক অ্যারে তৈরি করা যায়, এবং delete[] অপারেটর দিয়ে ডায়নামিক অ্যারেটি মেমোরি থেকে মুক্ত করা যায়।
#include <iostream>
using namespace std;
int main() {
int size;
cout << "Enter array size: ";
cin >> size;
// ডায়নামিক অ্যারে তৈরি
int *arr = new int[size];
// অ্যারের জন্য মান ইনপুট নেওয়া
cout << "Enter " << size << " elements: ";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
// অ্যারে প্রিন্ট করা
cout << "Array elements are: ";
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
// মেমোরি মুক্ত করা
delete[] arr;
return 0;
}
বর্ণনা:
- এখানে
sizeনামে একটি ভ্যারিয়েবলের মাধ্যমে অ্যারের আকার ইনপুট নেওয়া হয়েছে। new int[size]দিয়ে একটি ডায়নামিক অ্যারে তৈরি করা হয়েছে, যেখানেsizeআকারের অ্যারের জন্য মেমোরি বরাদ্দ করা হয়েছে।delete[] arr;দিয়ে অ্যারেটির মেমোরি মুক্ত করা হয়েছে।
ডায়নামিক অ্যারের আকার পরিবর্তন
C++ এ ডায়নামিক্যালি বরাদ্দকৃত অ্যারের আকার সরাসরি পরিবর্তন করা সম্ভব নয়। তবে নতুন আকারের জন্য একটি নতুন ডায়নামিক অ্যারে তৈরি করে পুরনো অ্যারেটির মানগুলো নতুন অ্যারেতে কপি করা যায় এবং পুরনো অ্যারে মেমোরি থেকে মুক্ত করা যায়।
উদাহরণ: ডায়নামিক অ্যারের আকার পরিবর্তন
#include <iostream>
using namespace std;
int main() {
int size = 3;
int *arr = new int[size];
// প্রাথমিক মান ইনপুট নেওয়া
cout << "Enter 3 elements: ";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
// নতুন আকারের জন্য একটি বড় অ্যারে তৈরি করা
int newSize = 5;
int *newArr = new int[newSize];
// পুরনো অ্যারের মান নতুন অ্যারেতে কপি করা
for (int i = 0; i < size; i++) {
newArr[i] = arr[i];
}
// নতুন উপাদান যোগ করা
newArr[3] = 40;
newArr[4] = 50;
// পুরনো অ্যারেটির মেমোরি মুক্ত করা
delete[] arr;
// নতুন অ্যারের মান প্রিন্ট করা
cout << "Resized array elements are: ";
for (int i = 0; i < newSize; i++) {
cout << newArr[i] << " ";
}
cout << endl;
// নতুন অ্যারেটির মেমোরি মুক্ত করা
delete[] newArr;
return 0;
}
বর্ণনা:
- প্রথমে
size = 3আকারের একটি ডায়নামিক অ্যারেarrতৈরি করা হয়েছে এবং প্রাথমিক মান ইনপুট নেওয়া হয়েছে। - পরে
newSize = 5আকারের একটি নতুন অ্যারেnewArrতৈরি করা হয়েছে এবংarrএর মানগুলোnewArrএ কপি করা হয়েছে। - পরে
arrমেমোরি থেকে মুক্ত করা হয়েছে, এবংnewArrএর নতুন আকারে মানগুলো প্রিন্ট করা হয়েছে।
ডায়নামিক অ্যারে ব্যবহারে সতর্কতা
- মেমোরি লিক প্রতিরোধ: প্রতিবার ডাইনামিক মেমোরি বরাদ্দের পর
delete[]অপারেটর ব্যবহার করে সেই মেমোরি মুক্ত করতে হবে, যাতে মেমোরি লিক না হয়। - ড্যাংলিং পয়েন্টার প্রতিরোধ: মেমোরি মুক্ত করার পর পয়েন্টারকে
nullptrবাNULLদিয়ে সেট করা উচিৎ। - আউট-অফ-বাউন্ড অ্যাক্সেস: অ্যারের ইনডেক্স সীমা লঙ্ঘন এড়াতে সতর্ক থাকতে হবে, কারণ এটি অনির্ধারিত আচরণ সৃষ্টি করতে পারে।
স্মার্ট পয়েন্টার ব্যবহার করে ডায়নামিক অ্যারে
C++11 এ স্মার্ট পয়েন্টার ব্যবহার করে ডায়নামিক অ্যারে তৈরি করলে মেমোরি ম্যানেজমেন্ট আরও সহজ হয় এবং মেমোরি লিক এড়ানো যায়। unique_ptr স্মার্ট পয়েন্টার ব্যবহার করে ডায়নামিক অ্যারে তৈরি করার একটি উদাহরণ নিচে দেওয়া হলো।
#include <iostream>
#include <memory>
using namespace std;
int main() {
int size = 5;
unique_ptr<int[]> arr(new int[size]); // unique_ptr ব্যবহার করে ডায়নামিক অ্যারে
// মান ইনপুট নেওয়া
cout << "Enter 5 elements: ";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
// মান প্রিন্ট করা
cout << "Array elements are: ";
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0; // unique_ptr এর মেমোরি স্বয়ংক্রিয়ভাবে মুক্ত হয়
}
বর্ণনা:
- এখানে
unique_ptr<int[]>ব্যবহার করে ডায়নামিক অ্যারে তৈরি করা হয়েছে। unique_ptrব্যবহারের ফলে প্রোগ্রাম শেষে মেমোরি স্বয়ংক্রিয়ভাবে মুক্ত হয়ে যায়।
সারসংক্ষেপ
- ডায়নামিক অ্যারে প্রোগ্রাম চলাকালীন সময়ে আকার নির্ধারণের সুবিধা দেয়।
newএবংdelete[]অপারেটর ব্যবহার করে ডায়নামিক অ্যারে তৈরি ও মুক্ত করা হয়।- ডায়নামিক মেমোরি ম্যানেজমেন্টের মাধ্যমে প্রয়োজনীয় মেমোরি সাশ্রয় করা যায়।
- স্মার্ট পয়েন্টার ব্যবহার করে ডায়নামিক অ্যারে তৈরি করলে মেমোরি ম্যানেজমেন্ট আরও সহজ হয়।
ডায়নামিক অ্যারে মেমোরি ব্যবহারে আরও নিয়ন্ত্রণ প্রদান করে এবং প্রোগ্রামে আরও নমনীয়তা ও কার্যকারিতা যোগ করে।