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ử 20Sau 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.
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
nbiểu thị số phần tử ban đầu cần thêm vào tập hợp - Sau đó là
nsố nguyên cần chèn vào tập hợp - Một số nguyên
mbiểu thị số phần tử cần xóa - Sau đó là
msố 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:
- Tạo một
std::set<int>rỗng - Đọ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() - In kích thước ban đầu của tập hợp sau khi chèn tất cả phần tử
- Đọc số lượng phần tử cần xóa
- Với mỗi phần tử cần xóa, dùng
.erase()để thử xóa - Sau mỗi lần thử xóa, in kích thước hiện tại của tập hợp
- 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;
}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
1Con trỏ và bộ nhớ
Con trỏ là gì?Toán tử lấy địa chỉToán tử giải tham chiếuCon trỏ nullCon trỏ và mảngBộ nhớ động với newGiải phóng bộ nhớ với deleteÔn tập: luyện tập về con trỏ2Vector (mảng động)
Giới thiệu std::vectorTạo vectorThêm phần tửTruy cập phần tửKích thước vectorDuyệt bằng vòng lặp forVòng lặp for dựa trên phạm viXóa phần tửÔn tập: các thao tác với vector5Dự án: Công cụ quản lý hàng tồn kho
Thiết lập dự ánThêm và cập nhật mặt hàng3Dự án: Công cụ danh sách công việc
Tổng quan dự ánThêm công việc6Tập hợp (các phần tử duy nhất)
Giới thiệu std::setTạo tập hợp và thêm phần tửKiểm tra phần tửXóa phần tửDuyệt qua tập hợpÔn tập: các số duy nhấtTự luyện tập: Trình biên dịch C++ online