Tôi muốn xóa một phần tử khỏi vectơ bằng phương pháp xóa. Nhưng vấn đề ở đây là phần tử không được đảm bảo chỉ xảy ra một lần trong vector. Nó có thể xuất hiện nhiều lần và tôi cần phải xóa tất cả chúng. Mã của tôi như thế này:
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;
}
Mã này rõ ràng bị treo bởi vì tôi đang thay đổi phần cuối của vectơ trong khi lặp lại qua nó. cách tốt nhất để đạt được điều này là gì? Tức là có cách nào để thực hiện việc này mà không cần lặp lại véc tơ nhiều lần hoặc tạo thêm một bản sao của véc tơ không?
std::remove()
dịch chuyển các phần tử sao cho các phần tử cần xóa bị ghi đè. Thuật toán không thay đổi kích thước của vùng chứa và nếun
các phần tử bị xóa thì sẽ không xác định được đâu làn
phần tử cuối cùng .