Menu
CoddyTech

Xóa phần tử

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 38 trên 56.

Đôi khi bạn cần xóa phần tử khỏi tập hợp khi không còn cần đến chúng nữa. Phương thức .erase() cho phép bạn xóa một phần tử cụ thể bằng cách cung cấp giá trị của phần tử đó.

Sau đây là cách xóa một phần tử khỏi tập hợp:

std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20);  // Xóa phần tử 20

Sau khi gọi .erase(20), tập hợp chỉ còn chứa {10, 30, 40}. Nếu bạn thử xóa một phần tử không có trong tập hợp, sẽ không có gì xảy ra, tập hợp vẫn giữ nguyên và không phát sinh lỗi.

Nhờ vậy, bạn có thể dùng .erase() an toàn ngay cả khi không chắc phần tử đó có tồn tại hay không. Cách này đặc biệt hữu ích để giữ cho các tập hợp luôn gọn gàng khi bạn cần xóa những mục cụ thể dựa trên đầu vào của người dùng hoặc logic chương trình.

challenge icon

Thử thách

Dễ

Tạo một chương trình minh họa cách xóa phần tử khỏi std::set bằng phương thức .erase(). Thử thách này sẽ kiểm tra mức độ hiểu của bạn về cách xóa an toàn các phần tử cụ thể khỏi tập hợp và quan sát kết quả.

Chương trình sẽ nhận các đầu vào sau:

  • Một số nguyên n biểu thị số phần tử ban đầu cần thêm vào tập hợp
  • Sau đó là n số nguyên cần chèn vào tập hợp
  • Một số nguyên m biểu thị số phần tử cần xóa
  • Sau đó là m số nguyên biểu thị các phần tử cần xóa khỏi tập hợp

Chương trình của bạn cần:

  1. Tạo một std::set<int> rỗng
  2. Đọc số lượng phần tử cần thêm và chèn chúng vào tập hợp bằng .insert()
  3. In kích thước ban đầu của tập hợp sau khi chèn tất cả phần tử
  4. Đọc số lượng phần tử cần xóa
  5. Với mỗi phần tử cần xóa, dùng .erase() để thử xóa
  6. Sau mỗi lần thử xóa, in kích thước hiện tại của tập hợp
  7. Cuối cùng, duyệt qua các phần tử còn lại trong tập hợp và in chúng theo thứ tự tăng dần

Dùng định dạng đầu ra chính xác sau:

Kích thước ban đầu của tập hợp:

Initial size: [size]

Sau mỗi lần thử xóa:

After removing [number]: size = [current_size]

Các phần tử còn lại cuối cùng:

Remaining elements: [element1] [element2] [element3] ...

Hãy nhớ rằng .erase() xử lý an toàn các lần thử xóa phần tử không tồn tại trong tập hợp: tập hợp giữ nguyên và không xảy ra lỗi. Dùng vòng lặp for dựa trên phạm vi để in các phần tử còn lại. Chúng sẽ tự động hiển thị theo thứ tự tăng dần vì tập hợp duy trì các phần tử theo thứ tự đã sắp xếp.

Tự làm thử

#include <iostream>
#include <set>
using namespace std;

int main() {
    // Đọc số phần tử cần thêm
    int n;
    cin >> n;
    
    // Tạo một tập hợp rỗng
    set<int> mySet;
    
    // Đọc và thêm n phần tử
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Thêm phần tử vào tập hợp
    }
    
    // Đọc số phần tử cần xóa
    int m;
    cin >> m;
    
    // TODO: Viết code của bạn bên dưới
    // 1. In ra kích thước ban đầu của tập hợp
    // 2. Với mỗi phần tử cần xóa, dùng .erase() và in ra kích thước sau mỗi lần xóa
    // 3. In ra các phần tử còn lại trong tập hợp
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C++ online