ในบทความนี้เราจะอธิบายการทำงาน ไวยากรณ์ และตัวอย่างของฟังก์ชัน list::emplace_front() และ list::emplace_back() ใน C++ Standard Template Library (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::emplace_front() คืออะไร?
list::emplace_front() เป็นฟังก์ชันในตัวของ C++ STL ที่ประกาศใน header file <list> ฟังก์ชันนี้ใช้สำหรับ สร้างและแทรก (emplace) องค์ประกอบที่จุดเริ่มต้น (front) ของ list container หาก container ว่าง จะแทรกที่ตำแหน่งแรกและกลายเป็นองค์ประกอบแรก หากมีองค์ประกอบอยู่แล้ว จะแทรกที่หน้า และองค์ประกอบเดิมที่อยู่หน้าจะกลายเป็นองค์ประกอบที่สอง ฟังก์ชันนี้เพิ่มขนาดของ container ขึ้น 1
ไวยากรณ์ (Syntax)
listname.emplace_front(const value_type& element); listname.emplace_front(value_type&& element);
พารามิเตอร์ (Parameters)
รับพารามิเตอร์หนึ่งคือองค์ประกอบที่ต้องการ emplace/insert
ค่าที่ส่งคืน (Return Value)
ฟังก์ชันนี้ไม่ส่งคืนค่าใดๆ (void)
ตัวอย่างการใช้งาน
Input: list<int> mylist = {1, 2, 3, 4};
mylist.emplace_front(0);
Output: List elements are = 0 1 2 3 4
ตัวอย่างโค้ดเต็ม
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> List;
List.emplace_front(10);
List.emplace_front(20);
List.emplace_front(30);
List.emplace_front(40);
List.emplace_front(50);
List.emplace_front(60);
cout << "Elements are : ";
for(auto i = List.begin(); i != List.end(); ++i)
cout << ' ' << *i;
return 0;
}
ผลลัพธ์ (Output)
Elements are : 60 50 40 30 20 10
list::emplace_back() คืออะไร?
list::emplace_back() เป็นฟังก์ชันในตัวของ C++ STL ที่ประกาศใน header file <list> ฟังก์ชันนี้ใช้สำหรับ สร้างและแทรก (emplace) องค์ประกอบที่จุดสิ้นสุด (back/end) ของ list container หาก container ว่าง จะแทรกอย่างง่ายและขนาดกลายเป็น 1 หากมีองค์ประกอบอยู่แล้ว จะแทรกที่ท้าย ฟังก์ชันนี้เพิ่มขนาดของ container ขึ้น 1
ไวยากรณ์ (Syntax)
listname.emplace_back(const value_type& element); listname.emplace_back(value_type&& element);
พารามิเตอร์ (Parameters)
รับพารามิเตอร์หนึ่งคือองค์ประกอบที่ต้องการ emplace/insert
ค่าที่ส่งคืน (Return Value)
ฟังก์ชันนี้ไม่ส่งคืนค่าใดๆ (void)
ตัวอย่างการใช้งาน
Input: list<int> list1 = {1, 2, 3, 4};
list1.emplace_back(5);
Output: List: 1 2 3 4 5
ตัวอย่างโค้ดเต็ม
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> List;
List.emplace_back(10);
List.emplace_back(20);
List.emplace_back(30);
List.emplace_back(40);
List.emplace_back(50);
List.emplace_back(60);
cout << "elements are : ";
for(auto i = List.begin(); i != List.end(); ++i)
cout << ' ' << *i;
return 0;
}
ผลลัพธ์ (Output)
Elements are : 10 20 30 40 50 60