เนื่องจากการดำเนินการเดียวที่จำเป็นสำหรับคอนเทนเนอร์ที่จะใช้ในสแต็กคือ:
- กลับ()
- push_back ()
- pop_back ()
เหตุใดคอนเทนเนอร์เริ่มต้นจึงเป็น deque แทนที่จะเป็นเวกเตอร์
อย่าถอดการจัดสรรใหม่ให้บัฟเฟอร์ขององค์ประกอบก่อน front () เพื่อให้ push_front () เป็นการดำเนินการที่มีประสิทธิภาพ? องค์ประกอบเหล่านี้ไม่สูญเปล่าเนื่องจากจะไม่ถูกใช้ในบริบทของสแต็ก?
หากไม่มีค่าใช้จ่ายสำหรับการใช้ deque ด้วยวิธีนี้แทนเวกเตอร์เหตุใดค่าเริ่มต้นสำหรับ priority_queue จึงเป็นเวกเตอร์จึงไม่ใช่ deque ด้วย (Priority_queue ต้องการ front (), push_back () และ pop_back () - โดยพื้นฐานแล้วเหมือนกับ stack)
อัปเดตตามคำตอบด้านล่าง:
ดูเหมือนว่าวิธีใช้ deque มักจะเป็นอาร์เรย์ขนาดตัวแปรของอาร์เรย์ขนาดคงที่ สิ่งนี้ทำให้เติบโตเร็วกว่าเวกเตอร์ (ซึ่งต้องมีการจัดสรรใหม่และการคัดลอก) ดังนั้นสำหรับบางสิ่งเช่นสแต็กที่เกี่ยวกับการเพิ่มและลบองค์ประกอบ deque น่าจะเป็นทางเลือกที่ดีกว่า
priority_queue ต้องการการจัดทำดัชนีอย่างมากเนื่องจากการลบและการแทรกทุกครั้งทำให้คุณต้องเรียกใช้ pop_heap () หรือ push_heap () สิ่งนี้อาจทำให้เวกเตอร์เป็นทางเลือกที่ดีกว่าเนื่องจากการเพิ่มองค์ประกอบยังคงถูกตัดจำหน่ายอย่างต่อเนื่อง