Saya ingin menghapus elemen dari vektor menggunakan metode hapus. Tetapi masalahnya di sini adalah bahwa elemen tersebut tidak dijamin hanya terjadi sekali dalam vektor. Ini mungkin ada beberapa kali dan saya perlu menghapus semuanya. Kode saya adalah seperti ini:
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;
}
Kode ini jelas macet karena saya mengubah ujung vektor sambil mengulanginya. Apa cara terbaik untuk mencapai ini? Yaitu adakah cara untuk melakukan ini tanpa melakukan iterasi melalui vektor beberapa kali atau membuat satu salinan vektor lagi?
std::remove()
menggeser elemen sedemikian rupa sehingga elemen yang akan dihapus ditimpa. Algoritme tidak mengubah ukuran penampung, dan jikan
elemen dihapus maka tidak ditentukan apan
elemen terakhir .