২-১ঃ ভেক্টর ইনিশিয়ালাইজেশন এবং কন্সট্রাক্টর

ভেক্টর হলো মূলত এক ধরনের Array। কিন্তু ভেক্টর সুপার পাওয়ার রয়েছে। সুপার পাওয়ার টা হলো আমরা চাইলে এই ভেক্টর এর সাইজ নিজের ইচ্ছা মতো যখন ইচ্ছা তখন পরিবর্তন করতে পারি। অর্থাৎ , নতুন কোন ভ্যালু এড করতে পারবো এবং ভ্যালু ডিলিট করতে পারবো। এর জন্য নরমাল এরে এর মতো অন্য কোন এক্সট্রা স্পেস নিতে হবে না। তাহলে আমরা জানলাম ।

ভেক্টর হলো Dynamic Array যার সাইজ আমরা নিজের প্রয়োজন মতো বাড়াতে পারবো / কমাতে পারবো। অর্থাৎ ভেক্টরের মধ্যে খুব সহজে নতুন ভ্যালু এড করতে পারবো এবং ভ্যালু ডিলিট করতে পারবো । যা আমরা একটি Array এর মতো ইন্ডেক্স ব্যবহার করে খুব সহজে এক্সেস করতে পারবো। এখানেও Array এর মতো 0 index হতে মান শুরু হয়

ভেক্টর কেনো প্রয়োজন তা আমরা শিখে ফেলেছি। আসেন এইবার কীভাবে কোডে ইমপ্লিমেন্ট করতে হয় তা শিখে নিই। ভেক্টর ব্যবহার করতে হলে আমাদের আগে ভেক্টর ডিক্লেয়ার / ইনিশিয়ালাইজ করে নিতে হবে। আসেন প্রয়োজন অনুসারে ভেক্টর ইনিশিয়ালাইজেশনের বিভিন্ন টাইপ দেখে নেয়া যাক। ১ম টাইপঃ

যদি আমরা না জানি initially আমাদের ভেক্টর এর সাইজ কতো হবে সেই ক্ষেত্রে আমরা কোন সাইজ ছাড়া ভেক্টর ডিক্লেয়ার করবো। এইক্ষেত্রে ভেক্টর টি মেমরি তে ০ সাইজের একটি জায়গা দখল করে নিবে , যা পরবর্তীতে ভ্যালু এড হতে হতে বাড়তে থাকবে। নিচের মতো প্রথমে vector keyword ব্যবহার করে কোন টাইপের ডেটা রাখতে চাচ্ছেন তার ডাটা টাইপ দিতে হবে এবং ঐ ভেক্টরের নাম দিতে হবে।

 Type 1 :
   vector< data_type > vector_name ;

    Code : 
        vector<int> v ; // এর মাধ্যমে ইন্টিজার ডাটা টাইপের একটি ভেক্টর তৈরি হবে
        vector<char> v ; // এর মাধ্যমে ক্যারেক্টার ডাটা টাইপের একটি ভেক্টর তৈরি হবে
        vector<float> v ; // এর মাধ্যমে ফ্লোট ডাটা টাইপের একটি ভেক্টর তৈরি হবে
        vector<long long> v ; // এর মাধ্যমে লং লং ইন্টিজার ডাটা টাইপের একটি ভেক্টর তৈরি হবে        

২য় টাইপঃ আমরা যদি আগে থেকেই আমাদের কী পরিমাণ ডাটা দেয়া থাকবে তা জানতে পারি , তবে সেক্ষেত্রে আমরা একটি নির্দিষ্ট সাইজের ভেক্টর ডিক্লেয়ার করতে পারবো। এই ক্ষেত্রে ভেক্টর টি মেমরি তে নির্দিষ্ট সাইজের জায়গা দখল করে নিবে। এবং ভ্যালু ইনপুট না দেয়া পর্যন্ত কিছু গারবেজ ভ্যালু রেখে দিবে। পরবর্তীতে চাইলে আমরা ভেক্টর টির সাইজ বাড়াতে বা কমাতে পারবো। নিচের মতো প্রথমে vector keyword ব্যবহার করে কোন টাইপের ডেটা রাখতে চাচ্ছেন তার ডাটা টাইপ দিতে হবে এবং ঐ ভেক্টরের নাম দিতে হবে এবং একই সাথে ভেক্টরের সাইজ টা দিয়ে দিতে হবে।

 Type 2 :
   vector< data_type > vector_name (size)  ;

    Code : 
        vector<int> v (100)  ; // এর মাধ্যমে 100 সাইজের  ইন্টিজার ডাটা টাইপের একটি ভেক্টর তৈরি হবে
        vector<char> v (50) ; // এর মাধ্যমে 50 সাইজের ক্যারেক্টার ডাটা টাইপের একটি ভেক্টর তৈরি হবে
        vector<float> v (30) ; // এর মাধ্যমে 30 সাইজের ফ্লোট ডাটা টাইপের একটি ভেক্টর তৈরি হবে
        vector<long long> v (40) ; // এর মাধ্যমে 40 সাইজের লং লং ইন্টিজার ডাটা টাইপের একটি ভেক্টর তৈরি হবে        

৩য় টাইপঃ

আমরা যদি আগে থেকেই আমাদের কী পরিমাণ ডাটা দেয়া থাকবে তা জানতে পারি, তবে সেক্ষেত্রে আমরা একটি নির্দিষ্ট সাইজের ভেক্টর ডিক্লেয়ার করতে পারবো। ভেক্টর টি মেমরি তে নির্দিষ্ট সাইজের জায়গা দখল করে নিবে। এবং আমরা গারবেজ ভ্যালু এর পরবর্তীতে আমাদের পছন্দের ভ্যালু দিয়ে ঐ জায়গা গুলো পূরণ করতে পারবো । পরবর্তীতে চাইলে একই সাথে আমরা ভেক্টর টির সাইজ বাড়াতে বা কমাতে পারবো। নিচের মতো প্রথমে vector keyword ব্যবহার করে কোন টাইপের ডেটা রাখতে চাচ্ছেন তার ডাটা টাইপ দিতে হবে, ভেক্টরের নাম দিতে হবে, ভেক্টরের সাইজ দিতে হবে এবং একই সাথে ঐ ভেক্টরের প্রত্যেকটি ভ্যালু কি দিয়ে ইনিশিয়ালাইজ করতে চাই তাও দিয়ে দিতে হবে।

 Type 3 :
   vector< data_type > vector_name (size,intitial_value)  ;

    Code : 
        vector<int> v (100,10)  ; // এর মাধ্যমে 100 সাইজের  ইন্টিজার ডাটা টাইপের একটি ভেক্টর তৈরি হবে যার প্রত্যেকটি ইন্ডেক্সের ভ্যালু হবে ১০
        vector<char> v (50,'a') ; // এর মাধ্যমে 50 সাইজের ক্যারেক্টার ডাটা টাইপের একটি ভেক্টর তৈরি হবে যার প্রত্যেকটি ইন্ডেক্সের ভ্যালু হবে 'a'
        vector<float> v (30,2.5) ; // এর মাধ্যমে 30 সাইজের ফ্লোট ডাটা টাইপের একটি ভেক্টর তৈরি হবে যার প্রত্যেকটি ইন্ডেক্সের ভ্যালু হবে ২.৫
        vector<long long> v (40,100) ; // এর মাধ্যমে 40 সাইজের লং লং ইন্টিজার ডাটা টাইপের একটি ভেক্টর তৈরি হবে যার প্রত্যেকটি ইন্ডেক্সের ভ্যালু হবে ১০০       

৪ তম টাইপঃ যদি আমরা চাই একটি ভেক্টর কে একটি ভেক্টরের মধ্যে কপি করে নিতে তবে আমরা নিচের মতো করে কোড লিখতে পারি

vector < int > v1 = {1,2,3,4} ; // একটি ভেক্টর ডিক্লেয়ার করে সেখানে এই ভ্যালু গুলা দিয়ে ইনিশিয়ালাইজ করলাম

vector < int > v2(v1) ; // আরেকটি ভেক্টর v2 তে v1 এর সকল ভ্যালু সমূহ কপি হয়ে যাবে।  

// একই ভাবে আমরা array ও কপি করতে পারবো। 

int array[5] = {1,2,3,4,5} ;

vector<int> copy_vector(array,array+5) ; // array er সব ভ্যালু এই ভেক্টরে কপি হয়ে যাবে

গুরুত্বপূর্ণ বিষয়ঃ

Array এর মতো ইন্ডেক্স ব্যবহার করে মান এসাইন করা যায়ঃ v[20] = 10 ; // ভেক্টর v এর ২০ নাম্বার ইন্ডেক্স এর ভ্যালু ১০ এসাইন হয়ে যাবে।

Last updated