มันอาจจะเป็นO (1) ถ้ารายการจะเก็บธงที่ช่วยให้การแลกเปลี่ยนความหมายของ“A prev
” และ“ next
” ชี้แต่ละโหนดมี หากการย้อนกลับรายการเป็นการดำเนินการบ่อยครั้งการเพิ่มอาจเป็นประโยชน์จริง ๆ และฉันไม่รู้ว่าทำไมการใช้งานนั้นจะถูกห้ามโดยมาตรฐานปัจจุบัน อย่างไรก็ตามการมีค่าสถานะดังกล่าวจะทำให้การสำรวจเส้นทางปกติของรายการมีราคาแพงกว่า (หากมีเพียงปัจจัยคงที่) เพราะแทนที่จะเป็น
current = current->next;
ในoperator++
รายการตัววนซ้ำคุณจะได้รับ
if (reversed)
current = current->prev;
else
current = current->next;
ซึ่งไม่ใช่สิ่งที่คุณต้องการเพิ่มอย่างง่ายดาย ระบุว่ารายการที่มักจะมีการสำรวจมากบ่อยกว่าที่พวกเขาจะกลับก็จะไม่ฉลาดมากสำหรับมาตรฐานเพื่ออาณัติเทคนิคนี้ ดังนั้นการดำเนินการย้อนกลับได้รับอนุญาตให้มีความซับซ้อนเชิงเส้น อย่างไรก็ตามโปรดทราบว่าt permitted O (1) ⇒ t ∈ O ( n ) ดังนั้นตามที่กล่าวไว้ก่อนหน้านี้การใช้“ การเพิ่มประสิทธิภาพ” ของคุณจะได้รับอนุญาตทางเทคนิค
หากคุณมาจาก Java หรือพื้นหลังที่คล้ายกันคุณอาจสงสัยว่าทำไมตัววนซ้ำต้องตรวจสอบการตั้งค่าสถานะในแต่ละครั้ง เราไม่สามารถมีตัววนซ้ำที่แตกต่างกันสองประเภท แต่ทั้งสองมาจากประเภทพื้นฐานทั่วไปและมีstd::list::begin
และstd::list::rbegin
ส่งคืนตัววนซ้ำที่เหมาะสมแบบ polymorphically ในขณะที่เป็นไปได้สิ่งนี้จะทำให้ทุกอย่างเลวร้ายยิ่งขึ้นเนื่องจากการเลื่อนตัววนซ้ำจะเป็นการเรียกใช้ฟังก์ชันทางอ้อม ใน Java คุณจะจ่ายราคานี้เป็นประจำอยู่แล้ว แต่อีกครั้งนี่เป็นหนึ่งในเหตุผลที่หลาย ๆ คนเข้าถึง C ++ เมื่อประสิทธิภาพมีความสำคัญ
ดังที่เบนจามินลินด์ลีย์ชี้ให้เห็นในความคิดเห็นเนื่องจากreverse
ไม่ได้รับอนุญาตให้ทำให้ตัววนซ้ำใช้ไม่ได้แนวทางเดียวที่ได้รับอนุญาตตามมาตรฐานดูเหมือนจะเก็บตัวชี้กลับไปยังรายการภายในตัววนซ้ำซึ่งทำให้หน่วยความจำเข้าถึง