ฉันอ่านหน้านี้แต่ฉันไม่สามารถหาเหตุผลเดียวกันได้ มีการกล่าวถึงว่า
"มันสมเหตุสมผลกว่าที่จะไม่ส่งคืนค่าใด ๆ เลยและต้องการให้ไคลเอ็นต์ใช้ front () เพื่อตรวจสอบค่าที่ด้านหน้าของคิว"
แต่การตรวจสอบองค์ประกอบจาก front () จำเป็นต้องคัดลอกองค์ประกอบนั้นด้วยค่า lvalue ตัวอย่างเช่นในส่วนรหัสนี้
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);
/ * ที่นี่ชั่วคราวจะถูกสร้างขึ้นบน RHS ซึ่งจะถูกกำหนดให้กับผลลัพธ์และในกรณีที่หากส่งคืนโดยการอ้างอิงผลลัพธ์จะถูกแสดงผลไม่ถูกต้องหลังจากการดำเนินการป๊อป * /
result = myqueue.front(); //result.
std::cout << ' ' << result;
myqueue.pop();
บนวัตถุcoutบรรทัดที่ห้าก่อนสร้างสำเนา myqueue.front () จากนั้นกำหนดให้เป็นผลลัพธ์ ดังนั้นความแตกต่างคืออะไรฟังก์ชันป๊อปสามารถทำสิ่งเดียวกันได้
front()
จำเป็นต้องคัดลอกองค์ประกอบนั้นด้วยค่า lvalue" - ไม่ front
ส่งคืนข้อมูลอ้างอิงไม่ใช่ค่า คุณสามารถตรวจสอบค่าที่อ้างถึงได้โดยไม่ต้องคัดลอก
pop()
คุณสามารถรอที่จะล็อคจนกว่าคุณจะทำนานและไม่จำเป็นต้องโทร หากคุณใช้std::queue<T, std::list<T>>
แล้วไม่มีข้อกังวลใด ๆ เกี่ยวกับการอ้างอิงที่ให้มาจากfront()
การที่ a push()
. แต่คุณต้องรู้รูปแบบการใช้งานของคุณและควรบันทึกข้อ จำกัด ของคุณ
void std::queue::pop();
)