เวกเตอร์มีแอตทริบิวต์ "ยาว" สองรายการซึ่งหมายถึงสิ่งต่าง ๆ :
size
คือจำนวนองค์ประกอบที่ใช้งานได้ในเวกเตอร์ มันคือจำนวนของสิ่งที่คุณเก็บไว้ นี่คือความยาวแนวความคิด
capacity
คือจำนวนองค์ประกอบที่จะพอดีกับจำนวนหน่วยความจำที่เวกเตอร์ได้จัดสรรไว้ในปัจจุบัน
capacity >= size
ต้องเป็นจริงเสมอ แต่ไม่มีเหตุผลที่ทำให้พวกเขาเสมอกัน ตัวอย่างเช่นเมื่อคุณลบองค์ประกอบการลดขนาดการจัดสรรจะต้องสร้างการจัดสรรใหม่หนึ่งที่เก็บข้อมูลที่เล็กลงและย้ายเนื้อหาที่เหลือไป ("จัดสรรย้ายฟรี")
ในทำนองเดียวกันถ้าcapacity == size
และคุณเพิ่มองค์ประกอบเวกเตอร์สามารถขยายการจัดสรรโดยองค์ประกอบหนึ่ง (การดำเนินการ "จัดสรรย้ายฟรี") แต่โดยทั่วไปคุณจะต้องเพิ่มองค์ประกอบมากกว่าหนึ่งองค์ประกอบ หากความต้องการจำเป็นต้องเพิ่มขึ้นเวกเตอร์จะเพิ่มกำลังการผลิตมากกว่าหนึ่งองค์ประกอบเพื่อให้คุณสามารถเพิ่มองค์ประกอบอีกหลายองค์ประกอบก่อนที่จะต้องการย้ายทุกอย่างอีกครั้ง
ด้วยความรู้นี้เราสามารถตอบคำถามของคุณ:
std::vector<T>::resize()
เปลี่ยนขนาดของอาเรย์ หากคุณปรับขนาดให้เล็กกว่าขนาดปัจจุบันวัตถุส่วนเกินจะถูกทำลาย หากคุณปรับขนาดให้ใหญ่กว่าขนาดปัจจุบันวัตถุ "ใหม่" ที่เพิ่มในตอนท้ายจะถูกกำหนดเป็นค่าเริ่มต้น
std::vector<T>::shrink_to_fit()
ขอให้กำลังการผลิตมีการเปลี่ยนแปลงเพื่อให้ตรงกับขนาดปัจจุบัน (การนำไปปฏิบัติอาจหรือไม่ปฏิบัติตามคำขอนี้พวกเขาอาจลดกำลังการผลิต แต่ไม่ทำให้เท่ากับขนาดพวกเขาอาจไม่ทำอะไรเลย) หากทำตามคำขอแล้วสิ่งนี้จะยกเลิกบางส่วนหรือทั้งหมดของ การจัดสรรเวกเตอร์ โดยปกติแล้วคุณจะใช้สิ่งนี้เมื่อสร้างเวกเตอร์เสร็จแล้วและจะไม่เพิ่มรายการอื่นเข้าไปอีก (ถ้าคุณรู้ล่วงหน้าว่าจะเพิ่มไอเท็มจำนวนเท่าใดจะเป็นการดีกว่าถ้าใช้std::vector<T>::reserve()
บอกเวกเตอร์ก่อนที่จะเพิ่มไอเท็มใด ๆ แทนที่จะพึ่งพาshrink_to_fit
การทำอะไร)
ดังนั้นคุณจึงใช้resize()
เพื่อเปลี่ยนแปลงสิ่งที่เป็นแนวคิดในเวกเตอร์
คุณใช้shrink_to_fit()
เพื่อลดพื้นที่ส่วนเกินที่เวกเตอร์จัดสรรภายในโดยไม่ต้องเปลี่ยนว่าเนื้อหานั้นมีแนวคิดในเวกเตอร์เท่าใด