Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

list::remove() และ list::remove_if() ใน C++ STL


บทความนี้แสดงการทำงานของฟังก์ชัน list::remove() และ list::remove_if() ใน C++ STL

List ใน STL คืออะไร?

List เป็นคอนเทนเนอร์ที่รองรับการแทรกและลบข้อมูลได้ในเวลาคงที่ (constant time) ที่ตำแหน่งใดก็ได้ในลำดับ List ถูกนำไปใช้งานเป็น doubly linked list ทำให้จัดสรรหน่วยความจำแบบไม่ต่อเนื่องได้ List ให้ประสิทธิภาพการแทรก ดึง และย้ายข้อมูลที่ตำแหน่งใดก็ได้ในคอนเทนเนอร์ดีกว่า array, vector และ deque อย่างไรก็ตาม การเข้าถึงข้อมูลโดยตรง (random access) ใน List ช้ากว่า และ List คล้ายกับ forward_list แต่ forward_list เป็น singly linked list จึงวนลูปได้เฉพาะทิศทางไปข้างหน้าเท่านั้น

list::remove() คืออะไร?

ฟังก์ชันนี้ใช้สำหรับ ลบองค์ประกอบทั้งหมดที่มีค่าเท่ากับค่าที่ส่งผ่านพารามิเตอร์

ไวยากรณ์ (Syntax)

listname.remove(val);

พารามิเตอร์ (Parameters)

  • val – ค่าที่ต้องการลบ

ตัวอย่างการใช้งาน

Input List: 1 2 3 3 4 5
Output New List: 1 2 4 5 (ลบ 3 ทั้งหมด)

Input List: 5 6 7 8 8 8 9
Output New List: 5 7 8 8 8 9 (ลบ 6)

แนวทางการใช้งาน

  1. ประกาศ List
  2. พิมพ์ List
  3. เรียกใช้ remove() function

ตัวอย่างโค้ดเต็ม

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

int main() {
    list<int> list = { 21, 24, 28, 26, 27, 25 };
    
    // พิมพ์ list
    cout << "List: ";
    for(auto x = list.begin(); x != list.end(); ++x)
        cout << *x << " ";
    
    // เรียก remove()
    list.remove(27);
    
    cout << "\nNew List: ";
    for(auto x = list.begin(); x != list.end(); ++x)
        cout << *x << " ";
    
    return 0;
}

ผลลัพธ์ (Output)

Input - List: 21 24 28 26 27 25
Output - New List: 21 24 28 26 25

list::remove_if() คืออะไร?

ฟังก์ชันนี้ใช้สำหรับ ลบองค์ประกอบที่ทำให้ predicate (เงื่อนไข) ส่งคืน true

ไวยากรณ์ (Syntax)

listname.remove_if(predicate)

พารามิเตอร์ (Parameters)

  • predicate – ฟังก์ชันหรือ lambda ที่รับค่าและส่งคืน bool (true = ลบ, false = เก็บ)

ตัวอย่างการใช้งาน

Input List: 5 6 7 8 9 10
Output New List: 5 7 9 (ลบเลขคู่ทั้งหมด)

Input List: 5 10 15 20 25 30
Output New List: 5 15 25 (ลบตัวเลขที่หาร 10 ลงตัว)

แนวทางการใช้งาน

  1. ประกาศ predicate function
  2. ประกาศ list
  3. พิมพ์ list
  4. เรียก remove_if() พร้อมส่ง predicate

ตัวอย่างโค้ดเต็ม

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

// Predicate: true ถ้าหาร 3 ลงตัว
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 << " ";
    
    // เรียก remove_if()
    list.remove_if(div3);
    
    cout << "\nNew List: ";
    for(auto x = list.begin(); x != list.end(); ++x)
        cout << *x << " ";
    
    return 0;
}

ผลลัพธ์ (Output)

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