১০-৩ঃ List Modifiers Functions

List কে মডিফাই করার বিভিন্ন ফাংশনঃ 1. List এসাইনঃ আমরা চাইলে একটি List এ আরেকটি List এসাইন করতে পারি। যদি ঐ দুইটি List সাইজ সমান হয় , সেক্ষেত্রে এই এসাইনের টাইম কমপ্লেক্সিটি হবে O(1) , অন্যথায় এর টাইম কমপ্লেক্সিটি হবে O(N)

list<int> my_list = {1,2,3,4} ;

list<int> new_list ;

new_list = new_list ; // new_list এর মধ্যে my_list er সব ভ্যালু এসাইন হয়ে যাবে। 
  1. push_back() -> এই ফাংশনের মাধ্যমে আমরা List এর শেষের দিকে একটি ভ্যালু insert করতে পারি । অর্থাৎ এটি insert_at_tail এর মতো কাজ করে। একটি ভ্যালু insert করার পর list টির সাইজ ১ বেড়ে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(1).

Drawing
list<int> my_list = {1,2,3,4} ;

my_list.push_back(6) ; // ডান সাইডে ভ্যালু ৬ insert করবে

for(int element : my_list ) {

cout << element << " " ;

} // 1 2 3 4 6
  1. push_front() -> এই ফাংশনের মাধ্যমে আমরা List এর প্রথম দিকে একটি ভ্যালু insert করতে পারি । অর্থাৎ এটি insert_at_head এর মতো কাজ করে। একটি ভ্যালু insert করার পর list টির সাইজ ১ বেড়ে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(1).

Drawing
list<int> my_list = {1,2,3,4} ;

my_list.push_front(6) ; // বাম সাইডে ভ্যালু ৬ insert করবে

for(int element : my_list ) {

cout << element << " " ;

} // 6 1 2 3 4
  1. pop_back() -> এই ফাংশনের সাহায্যে আমরা List এর সর্ব ডানের ভ্যালুটি ডিলিট করতে পারি। ভ্যালু কমে যাওয়ার কারণে List এর সাইজ ও ১ কমে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি O(1).

Drawing
list<int>my_list = {5,6,7,8,9} ;

my_list.pop_back() ; // ডান সাইডে ভ্যালু 9 delete হয়ে যাবে

for(int element : my_list) {

cout << element << " " ;

} // 5 6 7 8 
  1. pop_front() -> এই ফাংশনের সাহায্যে আমরা List এর সর্ব বামের ভ্যালুটি ডিলিট করতে পারি। ভ্যালু কমে যাওয়ার কারণে List এর সাইজ ও ১ কমে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি O(1).

Drawing

list<int>my_list = {10,5,6,7,8} ;

my_list.pop_front() ; // বাম সাইডে ভ্যালু ১০ delete হয়ে যাবে

for( int element : my_list) {

cout << element << " " ;

} // 5 6 7 8 
  1. my_list.insert() : এই ফাংশনের সাহায্যে আমরা List এর যেকোন index (not similar to array) এ ভ্যালু এড করতে পারবো। এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(N+K) যেখানে N হলো list এর সাইজ এবং K হলো আমরা কয়টি ভ্যালু insert করবো তার সংখ্যা। ধরেন আমরা চাচ্ছি আমাদের list এর k তম index ভ্যালু ১০ এড করতে। এই ক্ষেত্রে আমরা লিখবো , তার my_list. insert(next(my_list.begin(),2),value) এবং তার ভ্যালু। next() হলো একটি ফাংশন যার সাহায্যে আমরা List এর শুরু থেকে শুরু কোন একটি index এর পয়েন্টার পাবো।

Drawing

list<int> my_list = {5,6,7,8,9} ;

my_list.insert(next(my_list.begin(),2) , 10 ) // list টির ২ নাম্বার index ১০ insert হয়ে যাবে। 

for(auto element : my_list){
cout << element << " " ; 
} 
// 5 6 10 7 8 9 
  1. my_list.erase() : এই ফাংশনের সাহায্যে আমরা কোনো একটি List এর নির্দিষ্ট index এর ভ্যালু ডিলিট করে দিতে পারি। এই ক্ষেত্রেও ফাংশনের ঐ index এর পয়েন্টার দিতে হবে , যা আমরা next ফাংশনের সাহায্যে খুব সহজে বের করে নিতে পারি।

list<int> my_list = {5,6,7,8,9} ;

my_list.erase(next(my_list.begin(),2)) ; // list টির ২ নাম্বার index delete হয়ে যাবে 

for(auto element : my_list){
cout << element << " " ; 
} 
// 5 6 8 9 

ভেক্টরের মতো replace and find ও List এর ক্ষেত্রে কাজ করে

  1. replace() -> এই ফাংশনের সাহায্যে আমরা list এর কোন একটি নির্দিষ্ট রেঞ্জের একটি নির্দিষ্ট ভ্যালুকে অন্য একটি ভ্যালু দিয়ে রিপ্লেস করে দিতে পারি। এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(N) .

Syntax : replace(my_list.begin() , my_list.end() , target_value , change_value)

list<int>my_list = {1,2,3,4,7,6,4,5,4,3,4} ;

replace(my_list.begin() , my_list.end() , 4, 100) // এই ফাংশন টি list এর যে যে স্থানে ভ্যালু 4 আছে তা চেঞ্জ করে 100 করে দিবে 

for(int element : my_list) {

cout << element << " "  ;

} // Output :  1 2 3 100 7 6 100 5 100 3 100 
  1. find() -> এই ফাংশনের সাহায্যে আমরা List এর কোন একটি ভ্যালু আছে কিনা খুজে দেখতে পারি। এই ফাংশন আমাদের একটি ইটারেটর রিটার্ন করে যা ঐ ভ্যালুটির ইন্ডেক্সে পয়েন্ট করা থাকে, আর যদি ভ্যালুটি খুজে না পায় তবে my_list.end() এ পয়েন্ট করে থাকে । এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(N).

Syntax : find(my_list.begin() , my_list.end() , target_value )

list<int> my_list = {1,2,3,4,7,6,4,5,4,3,4} ;

auto it = find(my_list.begin() , my_list.end() , 6) ; // ৬ ভ্যালুটি list এর মধ্যে পেলে প্রথম যে জায়গায় ভ্যালুটি আছে তার ইটারেটর টা রিটার্ন করা হবে


if( it !=my_list.end()){ // যদি ভ্যালুটি পাওয়া না যায় তবে it তে my_list.end() স্টোর হবে। 
cout << "found the value " << *it << endl } // যেহেতু ইটারেটর একটি পয়েন্টার এর মতো কাজ করে , তাই আমরা it কে dereferencing করে তার ভ্যালু দেখতে পারবো
else {
cout << "not found" << endl ;
} 

Last updated