Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm list::remove() và list::remove_if() trong C++ STL


Bài viết trình bày chức năng của hàm list::remove() và list::remove_if() trong C++ STL.

List trong STL là gì?

List là container cho phép chèn và xóa ở bất kỳ vị trí nào trong chuỗi với thời gian không đổi. List được triển khai dưới dạng danh sách liên kết đôi. List cho phép cấp phát bộ nhớ không liên tục. List hoạt động tốt hơn array, vector và deque khi chèn, trích xuất và di chuyển phần tử. Truy cập trực tiếp vào phần tử chậm hơn và list tương tự forward_list, nhưng forward_list là danh sách liên kết đơn chỉ lặp tiến.

remove() là gì?

Hàm này dùng để xóa giá trị cho trước được truyền vào tham số.

Cú pháp

listname.remove(val);

Tham số

val – Giá trị cần xóa.

Ví dụ

Input List: 1 2 3 3 4 5 Output New List: 1 2 4 5 (phần tử 3 bị xóa)
Input List: 5 6 7 8 8 8 9 Output New List: 5 7 8 8 8 9 (phần tử 6 bị xóa)

Cách tiếp cận

  • Khai báo List.

  • In List.

  • Gọi hàm remove().

Theo cách này có thể xóa phần tử cho trước.

Ví dụ hoàn chỉnh

// C++ code to demonstrate the working of list remove() function in STL
#include <iostream>
#include <list>
using namespace std;
int main() {
    list<int> list = { 21, 24, 28, 26, 27, 25 };
    // in list
    cout << " list: ";
    for (auto x = list.begin(); x != list.end(); ++x)
        cout << *x << " ";
    // gọi remove()
    list.remove(27);
    cout << " New List: ";
    for (x = list.begin(); x != list.end(); ++x)
        cout << ' ' << *x;
    return 0;
}

Kết quả

Input - List: 21 24 28 26 27 25
Output - New List: 21 24 28 26 25
Input – List: 45 46 47 48 49 50
Output – New List: 45 46 48 49 50

remove_if() là gì?

Hàm này dùng để xóa các giá trị khiến predicate (hàm điều kiện) trả về true.

Cú pháp

listname.remove_if(predicate)

Tham số

predicate – Điều kiện (hàm/lambda) truyền làm tham số.

Ví dụ

Input – List: 5 6 7 8 9 10 Output – New List: 5 7 9 (xóa các phần tử chẵn)
Input – List: 5 10 15 20 25 30 Output – New List: 5 15 25 (xóa các phần tử chia hết cho 10)

Cách tiếp cận

  • Khai báo hàm predicate.

  • Khai báo list.

  • In list.

  • Gọi remove_if() với predicate.

Theo cách này có thể xóa phần tử theo điều kiện bất kỳ. Khi gọi remove_if() truyền predicate làm tham số.

Ví dụ hoàn chỉnh

// C++ code to demonstrate the working of list remove_if() function in STL
#include <iostream>
#include <list>
using namespace std;
bool div3(const int& val) {
    return (val % 3) == 0;
}
int main() {
    list<int> list = { 2, 3, 4, 15, 9, 7, 21, 24, 13 };
    cout << " List: ";
    for (auto x = list.begin(); x != list.end(); ++x)
        cout << *x << " ";
    // gọi remove_if()
    list.remove_if(div3);
    cout << " New List: ";
    for (x = list.begin(); x != list.end(); ++x)
        cout << " " << *x;
    return 0;
}

Kết quả

Input – List: 2 3 4 15 9 7 21 24 13
Output – New List: 2 4 7 13