এই আর্টিকেলে আমরা C++-এ list::erase() ফাংশনের কাজ, সিনট্যাক্স এবং উদাহরণ আলোচনা করব।
STL-এ List কী?
List হলো একটি ডেটা স্ট্রাকচার যা সিকোয়েন্সে যেকোনো জায়গায় কনস্ট্যান্ট টাইমে ইনসারশন এবং ডিলিশন অনুমতি দেয়। লিস্টগুলো ডাবলি লিংকড লিস্ট হিসেবে ইমপ্লিমেন্ট করা হয়। লিস্ট নন-কন্টিগুয়াস মেমরি এলোকেশন অনুমতি দেয়। অ্যারের, ভেক্টরের এবং ডিকের চেয়ে লিস্টে ইনসারশন, এক্সট্রাকশন এবং এলিমেন্ট মুভিং যেকোনো পজিশনে দ্রুত হয়। লিস্টে এলিমেন্টে ডায়রেক্ট অ্যাক্সেস ধীর এবং লিস্ট forward_list-এর মতো, কিন্তু forward list অবজেক্টগুলো সিঙ্গলি লিংকড লিস্ট এবং সেগুলো শুধু ফরওয়ার্ডে ইটারেট করা যায়।
list::erase() কী?
list::erase() হলো C++ STL-এ একটি বিল্ট-ইন ফাংশন যা হেডার ফাইলে ডিক্লেয়ার করা আছে। erase() লিস্ট কন্টেইনার থেকে এলিমেন্ট রিমুভ করতে ব্যবহৃত হয়। আমরা লিস্ট কন্টেইনার থেকে একক এলিমেন্ট বা এলিমেন্টের রেঞ্জ রিমুভ করতে পারি। এটি লিস্ট কন্টেইনারের আকার রিমুভ/ইরেজ করা এলিমেন্টের সংখ্যা অনুযায়ী কমিয়ে দেয়।
সিনট্যাক্স
list_container.erase(positon); list_container.erase(start_position, end_position);
এই ফাংশন এক বা দুটি প্যারামিটার নিতে পারে −
প্যারামিটার
position − এটি একটি সিঙ্গল পজিশন যেখান থেকে আমরা একটি এলিমেন্ট রিমুভ করতে চাই।
start_position, end_position − এটি একটি রেঞ্জ ডিফাইন করে যেখান থেকে আমরা এলিমেন্টগুলো রিমুভ করতে চাই।
রিটার্ন ভ্যালু
এই ফাংশন একটি ইটারেটর রিটার্ন করে যা রিমুভ করা লাস্ট এলিমেন্টের পরের এলিমেন্টকে পয়েন্ট করে।
উদাহরণ
নিচের কোডে আমরা STL-এ উপস্থিত erase() ফাংশন ব্যবহার করে এলিমেন্ট ইরেজ করব এবং তার জন্য আমরা begin() ফাংশন ব্যবহার করে প্রথম এলিমেন্টকে পয়েন্ট করে একটি ইটারেটর ফেচ করব এবং তারপর সেই ইটারেটরকে ইরেজ করব যেটি লিস্টের প্রথম এলিমেন্ট ধারণ করে।
#include <bits/stdc++.h> using namespace std; int main(){ //Create a list list<int> myList; myList.push_back(2); myList.push_back(4); myList.push_back(6); myList.push_back(8); myList.push_back(10); cout<<"List before deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i<< " "; } //iterator that will point to the first element list<int>::iterator i = myList.begin(); myList.erase(i); //list after deleting the element cout << "\nList after deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i << " "; } return 0; }
আউটপুট
উপরোক্ত কোড রান করলে নিচের আউটপুট জেনারেট হবে
List before deleting elements: 2 4 6 8 10 List after deleting elements: 4 6 8 10
উদাহরণ
নিচের কোডে আমরা STL-এ উপস্থিত erase() ফাংশন ব্যবহার করে এলিমেন্ট ইরেজ করব এবং তার জন্য আমরা begin() ফাংশন ব্যবহার করে প্রথম এলিমেন্টকে পয়েন্ট করে একটি ইটারেটর (iterator 1) ফেচ করব এবং আরেকটি ইটারেটর (iterator 2) নেব যেটি সেকেন্ড এলিমেন্টকে পয়েন্ট করবে এবং তারপর iterator 1 এবং iterator 2-এর মধ্যকার রেঞ্জ থেকে ইরেজ করব এবং রেজাল্ট ডিসপ্লে করব।
#include <bits/stdc++.h> using namespace std; int main(){ //Create a list list<int> myList; myList.push_back(2); myList.push_back(4); myList.push_back(6); myList.push_back(8); myList.push_back(10); cout<<"List before deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i << " "; } //iterator that will point to the first element list<int>::iterator i_1, i_2; i_1 = myList.begin(); i_2 = myList.begin(); //advance() function will increment the position of iterator 2 by 3 advance(i_2, 4); //now it will delete the elements from the range 0 - 4 myList.erase(i_1, i_2); //list after deleting the element cout<< "\nList after deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i << " "; } return 0; }
আউটপুট
উপরোক্ত কোড রান করলে নিচের আউটপুট জেনারেট হবে
List before deleting elements: 2 4 6 8 10 List after deleting elements: 10