লিস্ট হলো ভেক্টরের মতো একটি Standard Library বা বিল্ট-ইন ডাটা স্ট্রাকচার। এটি Doubly Linked List এর মতো কাজ করে। অর্থাৎ Doubly Linked List এ যা যা করা সম্ভব তার সব কিছু এই List STL এ করা যাবে ।
ভেক্টরে কন্সট্রাক্টর এর সাহায্যে আমরা যে যে কাজ গুলো করতে পারতাম ঠিক এক ই ভাবে List এও ঐসব কাজ করা যাবে।
প্রথমে দেখে নেয়া যাক কীভাবে লিস্ট ইনিশিয়ালাইজ করা যায়।
১ম টাইপঃ
যদি আমরা না জানি initially আমাদের List এর সাইজ কতো হবে সেই ক্ষেত্রে আমরা কোন সাইজ ছাড়া List ডিক্লেয়ার করবো। নিচের মতো প্রথমে list keyword ব্যবহার করে কোন টাইপের ডেটা রাখতে চাচ্ছেন তার ডাটা টাইপ দিতে হবে এবং ঐ list এর নাম দিতে হবে।
Type 1 :
list< data_type > list_name ;
Code :
list<int> my_list ; // এর মাধ্যমে ইন্টিজার ডাটা টাইপের একটি list তৈরি হবে
list<char> my_list ; // এর মাধ্যমে ক্যারেক্টার ডাটা টাইপের একটি list তৈরি হবে
list<float> my_list ; // এর মাধ্যমে ফ্লোট ডাটা টাইপের একটি list তৈরি হবে
list<long long> my_list ; // এর মাধ্যমে লং লং ইন্টিজার ডাটা টাইপের একটি list তৈরি হবে
২য় টাইপঃ
আমরা যদি আগে থেকেই আমাদের কী পরিমাণ ডাটা দেয়া থাকবে তা জানতে পারি , তবে সেক্ষেত্রে আমরা একটি নির্দিষ্ট সাইজের List ডিক্লেয়ার করতে পারবো। এই ক্ষেত্রে List টি মেমরি তে নির্দিষ্ট সাইজের জায়গা দখল করে নিবে। এবং ভ্যালু ইনপুট না দেয়া পর্যন্ত Garbage value রেখে দিবে। নিচের মতো প্রথমে list keyword ব্যবহার করে কোন টাইপের ডেটা রাখতে চাচ্ছেন তার ডাটা টাইপ দিতে হবে এবং ঐ list এর নাম দিতে হবে এবং একই সাথে লিস্টের সাইজ টা দিয়ে দিতে হবে।
Type 2 :
list< data_type > list_name (size) ;
Code :
list<int> my_list(100) ; // এর মাধ্যমে 100 সাইজের ইন্টিজার ডাটা টাইপের একটি list তৈরি হবে
list<char> my_list(50) ; // এর মাধ্যমে 50 সাইজের ক্যারেক্টার ডাটা টাইপের একটি list তৈরি হবে
list<float> my_list(30) ; // এর মাধ্যমে 30 সাইজের ফ্লোট ডাটা টাইপের একটি list তৈরি হবে
list<long long> my_list(40) ; // এর মাধ্যমে 40 সাইজের লং লং ইন্টিজার ডাটা টাইপের একটি list তৈরি
৩য় টাইপঃ
আমরা যদি আগে থেকেই আমাদের কী পরিমাণ ডাটা দেয়া থাকবে তা জানতে পারি, তবে সেক্ষেত্রে আমরা একটি নির্দিষ্ট সাইজের List ডিক্লেয়ার করতে পারবো। List টি মেমরি তে নির্দিষ্ট সাইজের জায়গা দখল করে নিবে। এবংআমরা গারবেজ ভ্যালু এর পরবর্তীতে আমাদের পছন্দের ভ্যালু দিয়ে ঐ জায়গা গুলো পূরণ করতে পারবো । নিচের মতো প্রথমে list keyword ব্যবহার করে কোন টাইপের ডেটা রাখতে চাচ্ছেন তার ডাটা টাইপ দিতে হবে, List এর নাম দিতে হবে, List এর সাইজ দিতে হবে এবং একই সাথে ঐ List এর প্রত্যেকটি ভ্যালু কি দিয়ে ইনিশিয়ালাইজ করতে চাই তাও দিয়ে দিতে হবে।
Type 3 :
list< data_type > list_name (size,intitial_value) ;
Code :
list<int> v (100,10) ; // এর মাধ্যমে 100 সাইজের ইন্টিজার ডাটা টাইপের একটি list তৈরি হবে যার প্রত্যেকটি Node এর ভ্যালু হবে ১০
list<char> v (50,'a') ; // এর মাধ্যমে 50 সাইজের ক্যারেক্টার ডাটা টাইপের একটি list তৈরি হবে যার প্রত্যেকটি Node এর ভ্যালু হবে 'a'
list<float> v (30,2.5) ; // এর মাধ্যমে 30 সাইজের ফ্লোট ডাটা টাইপের একটি list তৈরি হবে যার প্রত্যেকটি Node এর ভ্যালু হবে ২.৫
list<long long> v (40,100) ; // এর মাধ্যমে 40 সাইজের লং লং ইন্টিজার ডাটা টাইপের একটি list তৈরি হবে
৪ তম টাইপঃ
যদি আমরা চাই একটি লিস্ট কে আরেকটি লিস্ট এর মধ্যে কপি করে নিতে তবে আমরা নিচের মতো করে কোড লিখতে পারি । একই সাথে আরেকটি Array এবং ভেক্টর থেকেও এই কাজ করা যাবে
list < int > my_list1 = {1,2,3,4} ; // একটি list ডিক্লেয়ার করে সেখানে এই ভ্যালু গুলা দিয়ে ইনিশিয়ালাইজ করলাম
list < int > my_list(v1) ; // আরেকটি list my_list এ my_list1 এর সকল ভ্যালু সমূহ কপি হয়ে যাবে।
// একই ভাবে আমরা array কপি করতে পারবো।
int array[5] = {1,2,3,4,5} ;
list<int> copy_list(array,array+5) ; // array er সব ভ্যালু list কপি হয়ে যাবে
// একই ভাবে আমরা ভেক্টর কপি করতে পারবো।
vector<int> v[5] = {1,2,3,4,5} ;
list<int> copy_list(array,array+5) ; // vector er সব ভ্যালু এই list এ কপি হয়ে যাবে
List এর প্রতিটি element কে সহজে এক্সেস করার উপায়ঃ
আমরা Range Based For loop এর সাহায্যে এই কাজ টি সহজে করতে পারি।
list < int > my_list = {1,2,3,4} ;
for ( int element : mylist){ // প্রতেকটি element ইটারেশন হয়ে element এর মধ্যে জমা হবে
cout << element << endl ; // element টি প্রিন্ট করে দিচ্ছি
}