Trang tài liệu
Khóa học C++ nền tảng
Chương 13. Idiom trong C++
Đặc ngữ Erase-remove

Đặc ngữ Erase-remove

Đặc ngữ erase-remove là một kỹ thuật C++ phổ biến để loại bỏ hiệu quả các phần tử khỏi bộ lưu trữ, đặc biệt là từ bộ lưu trữ chuỗi tiêu chuẩn như std::vector, std::list và std::deque. Nó tận dụng các thuật toán thư viện tiêu chuẩn std::remove (hoặc std::remove_if) và hàm thành viên erase().

Đặc ngữ bao gồm hai bước:

  • std::remove (hoặc std::remove_if) di chuyển các phần tử cần xóa về cuối bộ lưu trữ và trả về một trình vòng lặp trỏ đến phần tử đầu tiên cần xóa.
  • container.erase() xóa các phần tử khỏi bộ lưu trữ bằng cách sử dụng trình vòng lặp thu được ở bước trước. Đây là một ví dụ:
#include <algorithm>
#include <vector>
#include <iostream>
 
int main() {
    std::vector<int> numbers = {1, 3, 2, 4, 3, 5, 3};
    
    // Xóa tất cả các lần xuất hiện của 3 khỏi vecto.
    numbers.erase(std::remove(numbers.begin(), numbers.end(), 3), numbers.end());
 
    for (int number : numbers) {
        std::cout << number << " ";
    }
 
    return 0;
}

Đầu ra:

1 2 4 5

Trong ví dụ này, chúng tôi đã sử dụng thuật toán std::remove để xóa tất cả các lần xuất hiện của số 3 khỏi std::vector numbers. Sau khi loại bỏ, vecto chỉ chứa 1, 2, 4 và 5, như đầu ra hiển thị.