เหตุใด std :: stack จึงใช้ std :: deque ตามค่าเริ่มต้น
เนื่องจากการดำเนินการเดียวที่จำเป็นสำหรับคอนเทนเนอร์ที่จะใช้ในสแต็กคือ: กลับ() 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 () หรือ …