দুটি উপায় রয়েছে যার মাধ্যমে আপনি বিশেষ করে কোনও জিনিস মুছতে ব্যবহার করতে পারেন। একটি ভেক্টর নিতে দিন
std :: vector < int > v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(40);
v.push_back(50);
1) অ দক্ষ দক্ষ উপায়: যদিও এটি বেশ দক্ষ বলে মনে হচ্ছে তবে এটি মুছে ফাংশনটি উপাদানগুলিকে বিলম্বিত করে এবং সমস্ত উপাদানকে 1 দ্বারা বাম দিকে স্থানান্তরিত করে না
তাই এর জটিলতা O (n ^ 2) হবে
std :: vector < int > :: iterator itr = v.begin();
int value = 40;
while ( itr != v.end() )
{
if(*itr == value)
{
v.erase(itr);
}
else
++itr;
}
2) দক্ষ উপায় (প্রস্তাবিত) : এটি ERASE - আইডিয়োম রিমুভ নামেও পরিচিত ।
- std :: মুছে ফেলা প্রদত্ত পরিসরটিকে সমস্ত উপাদানগুলির সাথে একটি পরিসরে রূপান্তরিত করে যা ধারকটির শুরুতে স্থানান্তরিত প্রদত্ত উপাদানের সমান নয় compare
- সুতরাং, আসলে মিলিত উপাদানগুলি সরাবেন না। এটি কেবল নন-ম্যাচটি শুরুতে স্থানান্তরিত করেছে এবং নতুন বৈধ প্রান্তে একটি পুনরুক্তি দেয়। এটি কেবল ও (এন) জটিলতার প্রয়োজন।
অপসারণ অ্যালগরিদমের ফলাফল:
10 20 30 50 40 50
রিমোট টাইপের রিটার্নটি সেই ব্যাপ্তির নতুন প্রান্তে পুনরাবৃত্ত হয়।
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
এখন ভেক্টরের নতুন প্রান্ত থেকে পুরানো প্রান্ত পর্যন্ত উপাদানগুলি মুছতে ভেক্টরের মুছা ফাংশনটি ব্যবহার করুন। এটি ও (1) সময় প্রয়োজন।
v.erase ( std :: remove (v.begin() , v.end() , element ) , v.end () );
সুতরাং এই পদ্ধতিটি ও (এন) এ কাজ করে