ฟังก์ชั่นทั้งสองทำสิ่งที่แตกต่างอย่างมากมาย!
resize()
วิธี (และผ่านอาร์กิวเมนต์นวกรรมิกเทียบเท่ากับที่) จะแทรกหรือลบจำนวนที่เหมาะสมขององค์ประกอบเวกเตอร์ที่จะทำให้มันได้รับขนาด (มันมีอาร์กิวเมนต์ที่สองตัวเลือกที่จะระบุค่าของพวกเขา) มันจะส่งผลกระทบต่อการsize()
ทำซ้ำจะไปที่องค์ประกอบเหล่านั้นทั้งหมด push_back จะแทรกหลังจากพวกเขาและคุณสามารถเข้าถึงพวกเขาโดยตรงโดยใช้operator[]
จะแทรกหลังจากที่พวกเขาและคุณโดยตรงสามารถเข้าถึงได้โดยใช้
reserve()
วิธีเดียวที่จัดสรรหน่วยความจำ แต่ใบมันเตรียม มันมีผลต่อเท่านั้นcapacity()
แต่size()
จะไม่เปลี่ยนแปลง ไม่มีค่าสำหรับวัตถุเนื่องจากไม่มีการเพิ่มอะไรเข้าไปในเวกเตอร์ ถ้าคุณใส่องค์ประกอบแล้วจะไม่มีการจัดสรรใหม่เกิดขึ้นเพราะมันทำล่วงหน้า แต่นั่นเป็นผลกระทบเท่านั้น
ดังนั้นมันขึ้นอยู่กับสิ่งที่คุณต้องการ หากคุณต้องการอาร์เรย์ของ 1000 resize()
รายการเริ่มต้นของการใช้งาน หากคุณต้องการอาร์เรย์ที่คุณคาดว่าจะแทรก 1,000 รายการและต้องการหลีกเลี่ยงการจัดสรรสองสามรายการให้ใช้reserve()
รายการและต้องการที่จะหลีกเลี่ยงคู่ของการจัดสรรหนึ่งใช้
แก้ไข:ความคิดเห็นของ Blastfurnace ทำให้ฉันอ่านคำถามอีกครั้งและตระหนักว่าในกรณีของคุณคำตอบที่ถูกต้องไม่ได้ถูกจัดสรรล่วงหน้าด้วยตนเอง เพียงแค่แทรกองค์ประกอบในตอนท้ายตามที่คุณต้องการ เวกเตอร์จะจัดสรรโดยอัตโนมัติตามความจำเป็นและจะทำมันได้มากขึ้นได้อย่างมีประสิทธิภาพกว่าคู่มือวิธีที่กล่าวถึง กรณีเดียวที่reserve()
เหมาะสมคือเมื่อคุณมีการประมาณขนาดโดยรวมที่แม่นยำอย่างสมเหตุสมผลคุณจะต้องใช้งานได้ล่วงหน้าอย่างง่ายดาย
EDIT2: การแก้ไขคำถามโฆษณา: หากคุณมีการประมาณการเบื้องต้นแสดงreserve()
ว่าการประมาณการนั้น ถ้ามันยังไม่พอเพียงให้เวกเตอร์ทำมัน
std::vector
และคุณเสียหนึ่งในผลประโยชน์ของการใช้