আমি মুছা পদ্ধতিটি ব্যবহার করে কোনও ভেক্টর থেকে একটি উপাদান সাফ করতে চাই। তবে এখানে সমস্যাটি হ'ল উপাদানটি ভেক্টরে একবারে আসার নিশ্চয়তা দেয় না। এটি একাধিকবার উপস্থিত হতে পারে এবং আমার সেগুলি সমস্ত পরিষ্কার করতে হবে। আমার কোডটি এরকম কিছু:
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
এই কোডটি স্পষ্টতই ক্র্যাশ হয়েছে কারণ আমি এর মাধ্যমে পুনরাবৃত্তি করার সময় ভেক্টরের শেষ পরিবর্তন করছি। এই অর্জন করার জন্য সবচেয়ে ভাল উপায় কি? অর্থাৎ ভ্যাক্টরের মাধ্যমে একাধিকবার পুনরাবৃত্তি করা বা ভেক্টরের আরও একটি অনুলিপি তৈরি না করে এটি করার কোনও উপায় আছে কি?
std::remove()
উপাদানগুলি এমনভাবে স্থানান্তরিত করে যেগুলি সরানোর জন্য উপাদানগুলি ওভাররাইট করা হয়। অ্যালগরিদমটি ধারকটির আকার পরিবর্তন করে না এবং যদিn
উপাদানগুলি সরানো হয় তবে শেষn
উপাদানগুলি কী তা নির্ধারিত হয় ।