এখানে আমরা C++-এ অ্যারের ওপর ভেক্টরের কিছু সুবিধা এবং অসুবিধা দেখব।
ভেক্টর একটি টেমপ্লেট ক্লাস। এটি শুধু C++-এ কনস্ট্রাক্ট। অ্যারে বিল্ট-ইন ল্যাঙ্গুয়েজ কনস্ট্রাক্ট। অ্যারে বিভিন্ন ল্যাঙ্গুয়েজে আছে।
ভেক্টর ডাইনামিক অ্যারে হিসেবে ইমপ্লিমেন্টেড থাকে লিস্ট ইন্টারফেসের সাথে, অ্যারে স্ট্যাটিক বা ডাইনামিকভাবে প্রিমিটিভ ডেটা টাইপ দিয়ে ইমপ্লিমেন্ট করা যায়।
উদাহরণ
#include<iostream> #include<vector> using namespace std; int main() { int array[10]; //statically allocated array int* arr = new int[10]; //dynamically allocated array vector<int> vec; }
অ্যারের সাইজ ফিক্সড। একবার অ্যারে তৈরি হলে আমরা সাইজ পরিবর্তন করতে পারি না। ভেক্টরের সাইজ ডাইনামিক। যদি আমরা নতুন এলিমেন্ট যোগ করি, যদি জায়গা না থাকে, তবে এটি নতুন জায়গা তৈরি করে, এবং কিছু অতিরিক্ত জায়গা।
যদি অ্যারে ডাইনামিক্যালি অ্যালোকেট করা হয়, তবে আমাদের সেটি ম্যানুয়ালি ডি-অ্যালোকেট করতে হয়। কিন্তু ভেক্টরে আমাদের ডি-অ্যালোকেট করতে হয় না, এটি অটোমেটিক্যালি ডি-অ্যালোকেট হয়।
উদাহরণ
#include<iostream> #include<vector> using namespace std; int main() { int* arr = new int[10]; //dynamically allocated array delete(arr); //deallocate manually vector<int> vec; //will be deallocated when variable is out of scope }
যদি আমরা ডাইনামিক্যালি অ্যালোকেটেড অ্যারের সাইজ জানতে চাই, তবে সহজে জানা যায় না। ভেক্টরের জন্য, আমরা কনস্ট্যান্ট টাইমে সাইজ পেতে পারি।
যদি আমরা একটি অ্যারে ফাংশন প্যারামিটার হিসেবে পাস করতে চাই, তবে সাইজ বা লেন্থের জন্য আরেকটি ভেরিয়েবল পাস করতে হয়। যদি ভেক্টর পাস করি, তবে আমাদের অন্য কোনো ভেরিয়েবল পাস করতে হয় না।
আমরা একটি অ্যারে রিটার্ন করতে পারি না যদি না ডাইনামিক্যালি অ্যালোকেটেড new অ্যারে ব্যবহার করি, কিন্তু আমরা ফাংশন থেকে ভেক্টর রিটার্ন করতে পারি।