১০-৩ঃ 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 সব ভ্যালু এসাইন হয়ে যাবে।
push_back() -> এই ফাংশনের মাধ্যমে আমরা List এর শেষের দিকে একটি ভ্যালু insert করতে পারি । অর্থাৎ এটি insert_at_tail এর মতো কাজ করে। একটি ভ্যালু insert করার পর list টির সাইজ ১ বেড়ে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(1).
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
push_front() -> এই ফাংশনের মাধ্যমে আমরা List এর প্রথম দিকে একটি ভ্যালু insert করতে পারি । অর্থাৎ এটি insert_at_head এর মতো কাজ করে। একটি ভ্যালু insert করার পর list টির সাইজ ১ বেড়ে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি হলো O(1).
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
pop_back() -> এই ফাংশনের সাহায্যে আমরা List এর সর্ব ডানের ভ্যালুটি ডিলিট করতে পারি। ভ্যালু কমে যাওয়ার কারণে List এর সাইজ ও ১ কমে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি O(1).
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
pop_front() -> এই ফাংশনের সাহায্যে আমরা List এর সর্ব বামের ভ্যালুটি ডিলিট করতে পারি। ভ্যালু কমে যাওয়ার কারণে List এর সাইজ ও ১ কমে যাবে। এই ফাংশনের টাইম কমপ্লেক্সিটি O(1).
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
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 এর পয়েন্টার পাবো।
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
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 এর ক্ষেত্রে কাজ করে
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
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