บทนำ
งานนี้แสดงการทำงานของ forward_list::cbefore_begin() ใน C++
forward_list เก็บลิงก์เฉพาะอิลิเมนต์ถัดไป ไม่เหมือน list ธรรมดา วนลูปได้เฉพาะทิศทางหน้า
forward_list::cbefore_begin() เป็นส่วนหนึ่งของ C++ STL ใช้เพื่อรับตำแหน่งก่อนอิลิเมนต์แรกของลิสต์
ต้อง include <forward_list>
Syntax
Forward_List_Name.cbefore_begin();
Parameters
ไม่รับพารามิเตอร์
Return Value
คืนค่า Constant Iterator ที่ชี้ตำแหน่งก่อนอิลิเมนต์แรกของ forward_list
ตัวอย่าง
Input: 8, 9, 32, 21 Output: 56 8 9 32 21
คำอธิบาย - สร้าง forward list = {8, 9, 32, 21} เรียก cbefore_begin() ได้ iterator ชี้ก่อนตัวแรก (8) ใช้ insert_after() แทรก 56 ที่ตำแหน่งนั้น ได้ 56 8 9 32 21
แนวทางในโปรแกรม
- สร้าง forward_list Lt ประเภท int กำหนดค่า
- สร้าง iterator itr = Lt.cbefore_begin()
- ใช้ insert_after(itr, new_element) แทรกอิลิเมนต์ใหม่หน้าสุด
- วนลูปพิมพ์ลิสต์
อัลกอริทึม
Start
Step 1 → In main()
Initialize forward_list<int> Lt = {}
Initialize auto itr = Lt.cbefore_begin()
Call insert_after(itr, new_element)
Loop for auto itr = Lt.cbegin() to itr != Lt.end() itr++
Print *itr
End
Stop
ตัวอย่างโค้ด
#include <iostream>
#include <forward_list>
using namespace std;
int main() {
forward_list<int> Lt = { 40, 55, 67, 89 };
auto itr = Lt.cbefore_begin();
Lt.insert_after(itr, 77);
for (auto itr = Lt.cbegin(); itr != Lt.end(); ++itr)
cout << *itr << " ";
return 0;
}
ผลลัพธ์
77 40 55 67 89
คำอธิบายเพิ่มเติม
cbefore_begin() คืนค่า const_iterator ไม่สามารถแก้ไขค่าผ่าน iterator นี้ได้ ใช้ร่วมกับ insert_after() เพื่อแทรกที่หน้าสุด (เพราะ forward_list ไม่มี insert_before)