Tôi muốn xóa phần tử khỏi véc-tơ bằng phương pháp xóa. Nhưng vấn đề ở đây là phần tử không được bảo đảm chỉ xảy ra một lần trong vectơ. Nó có thể được trình bày nhiều lần và tôi cần phải xóa tất cả chúng. Mã của tôi là một cái gì đó như thế này:Xóa các phần tử khỏi một vector
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 là bị treo vì tôi đang thay đổi phần cuối của vector trong khi iterating qua nó. cách tốt nhất để đạt được điều này là gì? I E. là có cách nào để làm điều này mà không cần lặp qua vector nhiều lần hoặc tạo thêm một bản sao của véc-tơ?
'std :: remove()' thay đổi các phần tử sao cho các phần tử cần xóa sẽ bị ghi đè. Thuật toán không thay đổi kích thước của vùng chứa, và nếu các phần tử 'n' bị loại bỏ thì nó không được xác định là các phần tử' n' cuối cùng là gì. – wilhelmtell
thành phần xóa-xóa được mô tả trong khoản 32 trong sách "Hiệu quả STL: 50 cách cụ thể để cải thiện việc sử dụng thư viện mẫu chuẩn" của Scott Meyers. –
Làm thế nào tôi có thể cập nhật điều này để xóa một đối tượng tùy chỉnh, thay vì một đối tượng nguyên thủy? Tôi muốn xóa nội dung nào đó khi đang duyệt qua một vectơ. –
Benjin