forward_list chỉ giữ liên kết đến phần tử tiếp theo (khác list có cả prev/next), chỉ duyệt được một chiều.
emplace_front()
Chèn phần tử mới vào đầu danh sách.
Syntax: forward_list_name.emplace_front(element);
Không trả về giá trị.
emplace_after()
Chèn phần tử mới sau vị trí chỉ định bởi iterator.
Syntax: forward_list_name.emplace_after(iterator, element);
Trả về iterator trỏ đến phần tử vừa chèn.
Ví dụ minh họa
#include <iostream>
#include <forward_list>
using namespace std;
int main() {
forward_list<int> Lt = {5, 6, 7, 8};
// Chèn 3 vào đầu
Lt.emplace_front(3);
// Chèn 10 sau cuối (end() trỏ sau phần tử cuối)
auto itr = Lt.end();
Lt.emplace_after(itr, 10); // Lưu ý: end() không thể dereference, cần dùng before_end()
// In danh sách
for (auto it = Lt.begin(); it != Lt.end(); ++it)
cout << *it << " ";
return 0;
}
Kết quả
3 5 6 7 8 10
Lưu ý quan trọng: emplace_after(end()) là hành vi không xác định (UB). Cần dùng cbefore_begin() hoặc duyệt đến phần tử cuối. Code gốc có lỗi này.
Sửa đúng: Dùng auto itr = Lt.before_begin(); rồi ++itr đến vị trí mong muốn, hoặc dùng prev(Lt.end()) (C++11).