ทางเลือกของคุณควรสะท้อนถึงความต้องการของคุณ องค์ประกอบทั้งหมดของเวกเตอร์มีความต่อเนื่องในหน่วยความจำและรายการมีตัวชี้ไปยังองค์ประกอบถัดไป / ก่อนหน้าเพื่อให้พวกเขาแต่ละคนมีข้อดี / ข้อเสีย:
รายการ:
- แต่ละองค์ประกอบใช้จำนวนเต็ม 2 จำนวนในการชี้องค์ประกอบก่อนหน้าและถัดไปดังนั้นโดยทั่วไปแล้วนั่นคือ 8 ไบต์สำหรับแต่ละองค์ประกอบในรายการของคุณ
- ส่วนแทรกเป็นเส้นตรงในเวลา: O (n)
- การลบคือการทำงานที่คงที่: O (1)
- การเข้าถึงองค์ประกอบ x เป็นเส้นตรงเวลา: O (n)
เวกเตอร์:
- ต้องการหน่วยความจำน้อยกว่า (ไม่มีตัวชี้องค์ประกอบอื่น ๆ มันเป็นอัลกอริทึมทางคณิตศาสตร์อย่างง่าย)
- การลบเป็นเส้นตรงในเวลา: O (n)
- การเข้าถึงองค์ประกอบ x เป็นค่าคงที่: O (1) (นั่นเป็นเพราะองค์ประกอบมีความต่อเนื่องในหน่วยความจำดังนั้นจึงเป็นการดำเนินการทางคณิตศาสตร์อย่างง่าย vectorPtr + (x * bytesOfTheType))
- การแทรกสามารถอยู่ในเวลาเชิงเส้น แต่โดยทั่วไปแล้วมันเป็นการดำเนินการคงที่: O (1) (นั่นเป็นเพราะเวกเตอร์ในอาร์เรย์ แต่มักจะสำรอง 2 เท่าของความจุเมื่ออาร์เรย์เต็มดังนั้นการคัดลอกอาร์เรย์จึงไม่บ่อย)
ดังนั้นรายการจะดีกว่าเมื่อคุณโปรแกรมจำเป็นต้องเพิ่มและลบองค์ประกอบบ่อยครั้ง แต่อย่าเข้าถึง (หรือไม่ค่อยเข้าถึง) องค์ประกอบใดโดยไม่จำเป็นต้องมีองค์ประกอบอื่นมาก่อน ควรใช้เวกเตอร์เพื่อให้เข้าถึงเวลาได้ดีขึ้น แต่ไม่มีประสิทธิภาพเมื่อคุณต้องการลบหรือเพิ่มองค์ประกอบ
ตรวจสอบโพสต์นี้ใน stackoverflow มันมีกราฟที่ดีจริงๆพร้อมคำถามพื้นฐานเกี่ยวกับความต้องการของคุณที่นำคุณไปยังที่เก็บเฉพาะโดยขึ้นอยู่กับคำตอบของคุณ:
/programming/366432/extending-stdlist