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

std::forward_list::remove

#include <forward_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 forward_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ộ forward_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 forward_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 forward_list.
  6. Phân biệt với erase_after(): erase_after() 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. Độ phức tạp: Độ phức tạp của remove()O(n), với n là số phần tử trong forward_list.

Ví dụ

#include <iostream>
#include <forward_list>

int main() {
std::forward_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 <forward_list>
#include <string>

int main() {
std::forward_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 forward_list
erase_afterXóa một hoặc nhiều phần tử khỏi forward_list tại vị trí sau một iterator cho trước
uniqueXóa các phần tử trùng lặp liên tiếp khỏi forward_list
pop_frontXóa phần tử đầu tiên của forward_list