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

ฟังก์ชัน stack::emplace() ใน C++ STL

Stack ใน C++ STL คืออะไร?

Stack (สแต็ก) เป็นโครงสร้างข้อมูลที่จัดเก็บข้อมูลแบบ LIFO (Last In First Out) ซึ่งหมายถึงข้อมูลที่เข้าไปทีหลังจะถูกนำออกมาใช้ก่อน การเพิ่ม (push) และการนำออก (pop) ข้อมูลจะเกิดขึ้นที่ด้านบนสุดของสแต็กเท่านั้น คล้ายกับการซ้อนจาน หากต้องการเพิ่มจานใหม่ จะวางไว้ด้านบน และหากต้องการนำจานออก ก็จะนำจากด้านบนเช่นกัน

ฟังก์ชัน stack::emplace() คืออะไร?

ฟังก์ชัน stack::emplace() เป็นฟังก์ชันในตัว (built-in) ของ C++ STL ซึ่งประกาศอยู่ในไฟล์ header <stack> ฟังก์ชันนี้ใช้สำหรับสร้างและแทรกองค์ประกอบใหม่เข้าไปใน container สแต็กโดยตรง

เมื่อเรียกใช้ฟังก์ชันนี้ จะมีการแทรกองค์ประกอบใหม่ไว้ที่ด้านบนสุดของสแต็ก และทำให้องค์ประกอบที่เพิ่งแทรกเข้าไปกลายเป็นองค์ประกอบบนสุด (top element) ฟังก์ชันนี้จะเรียกใช้ emplace_back ภายในเพื่อแทรกองค์ประกอบใหม่ที่ด้านบน

รูปแบบไวยากรณ์ (Syntax)

stack_name.emplace(Args& args);

พารามิเตอร์

  • args - อาร์กิวเมนต์ที่ต้องการนำไปสร้างและแทรกเข้าไปในสแต็ก

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

ฟังก์ชันนี้ไม่ส่งค่าอะไรกลับ (void)

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: การใช้งานพื้นฐาน

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

int main() {
    stack<int> stck;
    stck.emplace(10);
    stck.emplace(20);
    stck.emplace(30);
    stck.emplace(40);
    stck.emplace(50);
    stck.emplace(60);
    
    cout << "Elements in stack are: ";
    while (!stck.empty()) {
        cout << stck.top() << " ";
        stck.pop();
    }
    return 0;
}

ผลลัพธ์

Elements in stack are: 60 50 40 30 20 10

ตัวอย่างที่ 2: นับจำนวนองค์ประกอบในสแต็ก

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

int main() {
    stack<int> stck;
    int total = 0;
    stck.emplace(10);
    stck.emplace(20);
    stck.emplace(30);
    stck.emplace(40);
    stck.emplace(50);
    stck.emplace(60);
    
    cout << "Elements in stack are: ";
    while (!stck.empty()) {
        cout << stck.top() << " ";
        stck.pop();
        total++;
    }
    cout << "\nTotal number of elements in stack are: " << total;
    return 0;
}

ผลลัพธ์

Elements in stack are: 60 50 40 30 20 10
Total number of elements in stack are: 6

สรุป

ฟังก์ชัน emplace() มีประสิทธิภาพมากกว่า push() ในบางกรณี เนื่องจากสร้างออบเจ็กต์โดยตรงในหน่วยความจำของ container (in-place construction) แทนที่จะสร้างแล้วคัดลอกหรือย้าย ซึ่งลด overhead การคัดลอกออบเจ็กต์ได้ โดยเฉพาะเมื่อทำงานกับออบเจ็กต์ที่มี constructor ซับซ้อน