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

ฟังก์ชัน before_begin() ของ forward_list ใน C++ STL

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

Forward list เป็นคอนเทนเนอร์แบบลำดับที่อนุญาตให้แทรกและลบข้อมูลได้ในเวลาคงที่ (constant time) ทุกตำแหน่งภายในลำดับ Forward list ถูกนำมาใช้งานเป็น singly-linked list (รายการเชื่อมโยงเดี่ยว) การจัดลำดับถูกเก็บรักษาโดยการเชื่อมโยงแต่ละองค์ประกอบไปยังองค์ประกอบถัดไปในลำดับ

forward_list::before_begin() คืออะไร?

forward_list::before_begin() เป็นฟังก์ชันในตัวใน C++ STL ที่ประกาศในไฟล์หัวข้อ <forward_list> ฟังก์ชัน before_begin() ส่งคืนอิเทอเร이터ที่ชี้ไปยังตำแหน่ง ก่อนหน้าองค์ประกอบแรก (before the first element) ในคอนเทนเนอร์ forward_list

ฟังก์ชันนี้มีความสำคัญอย่างยิ่งสำหรับ forward_list เนื่องจากเป็น singly-linked list ไม่สามารถย้อนกลับได้ ดังนั้นจึงต้องมีอิเทอเรเตอร์พิเศษสำหรับการแทรกข้อมูลที่ตำแหน่งแรกของลิสต์

ไวยากรณ์ (Syntax)

forwardlist_container.before_begin();

ฟังก์ชันนี้ไม่รับพารามิเตอร์

ค่าที่ส่งคืน (Return Value)

ส่งคืนอิเทอเร이터ไปยังตำแหน่งก่อนจุดเริ่มต้นของลำดับ (non-dereferenceable iterator)

ตัวอย่างการใช้งาน before_begin() กับ insert_after()

ในตัวอย่างด้านล่าง เราสร้าง forward list แล้วใช้ before_begin() ร่วมกับ insert_after() เพื่อแทรกข้อมูลใหม่ไว้หน้าองค์ประกอบแรก

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

int main() {
    // สร้างและกำหนดค่าเริ่มต้น forward list
    forward_list<int> forwardList = {3, 6, 1, 2, 4};
    // เรียก before_begin function
    auto i = forwardList.before_begin();
    // แทรกองค์ประกอบก่อน forward list
    forwardList.insert_after(i, 7);
    cout << "องค์ประกอบของ forward list ได้แก่: " << endl;
    for (auto j = forwardList.begin(); j != forwardList.end(); ++j)
        cout << *j << " ";
    return 0;
}

ผลลัพธ์ (Output)

องค์ประกอบของ forward list ได้แก่: 7 3 6 1 2 4

ตัวอย่างเพิ่มเติม: การแทรกค่าคงที่โดยตรง

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

int main() {
    forward_list<int> forwardList = {2, 23, 12, 11};
    forwardList.insert_after(forwardList.before_begin(), 19);
    cout << "องค์ประกอบใน forward lists ได้แก่: ";
    for (auto j = forwardList.begin(); j != forwardList.end(); ++j)
        cout << *j << " ";
    return 0;
}

ผลลัพธ์ (Output)

องค์ประกอบใน forward lists ได้แก่: 19 2 23 12 11

สรุป: before_begin() เป็นฟังก์ชันเฉพาะของ forward_list ที่จำเป็นสำหรับการแทรกข้อมูลที่หัวรายการ (head insertion) เนื่องจากไม่มี push_front() ใน forward_list (แตกต่างจาก list หรือ deque)