Chuyển tới nội dung chính

std::list::remove

#include <list>

void remove(const value_type& val);

Xóa tất cả các phần tử có giá trị bằng với một giá trị cho trước khỏi std::list.

Tham số

val

  • Giá trị của các phần tử cần xóa.

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. Xóa theo giá trị: remove() xóa tất cả các phần tử có giá trị bằng val, không phải xóa theo vị trí.
  2. Duyệt toàn bộ danh sách: remove() phải duyệt qua toàn bộ std::list để tìm các phần tử cần xóa.
  3. Sử dụng toán tử ==: remove() sử dụng toán tử == để so sánh giá trị của các phần tử với val. Do đó, kiểu phần tử của std::list phải hỗ trợ toán tử ==.
  4. Không làm thay đổi vị trí tương đối của các phần tử còn lại: remove() chỉ xóa các phần tử có giá trị bằng val, thứ tự tương đối của các phần tử còn lại được giữ nguyên.
  5. Có thể làm thay đổi iterator: Thao tác xóa phần tử có thể làm thay đổi (invalidate) các iterator đang trỏ đến std::list.
  6. Phân biệt với erase(): erase() xóa phần tử theo vị trí (iterator), còn remove() xóa phần tử theo giá trị.
  7. Để xóa các phần tử thỏa mãn điều kiện tổng quát hơn: Sử dụng remove_if().
  8. Không làm thay đổi kích thước tối đa: remove() không làm thay đổi giá trị trả về bởi max_size().
  9. Độ phức tạp: Độ phức tạp của remove()O(n), với n là số phần tử trong std::list.

Ví dụ

#include <iostream>
#include <list>

int main() {
std::list<int> mylist = {10, 20, 10, 30, 40, 10, 50};

mylist.remove(10); // Xóa tất cả các phần tử có giá trị bằng 10

std::cout << "mylist after remove(10):";
for (int x : mylist) std::cout << ' ' << x; // Output: mylist after remove(10): 20 30 40 50
std::cout << '\n';

return 0;
}

#include <iostream>
#include <list>
#include <string>

int main() {
std::list<std::string> mylist = {"apple", "banana", "apple", "orange", "apple"};

mylist.remove("apple"); // Xóa tất cả các chuỗi "apple"

std::cout << "mylist after remove(\"apple\") :";
for (const std::string& str : mylist) std::cout << ' ' << str; // Output: mylist after remove("apple") : banana orange
std::cout << '\n';

return 0;
}

Các hàm liên quan

remove_ifXóa tất cả các phần tử thỏa mãn một điều kiện cụ thể khỏi std::list
eraseXóa một hoặc nhiều phần tử khỏi std::list tại một vị trí cụ thể hoặc trong một phạm vi
uniqueXóa các phần tử trùng lặp liên tiếp khỏi std::list
pop_backXóa phần tử cuối cùng của std::list
pop_frontXóa phần tử đầu tiên của std::list