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)