... มันมีประโยชน์มากที่จะมีตัวเลือกในการผ่านช่วง แต่อย่างน้อยในประสบการณ์ของฉันนั่นเป็นกรณีพิเศษที่หายาก ฉันมักจะต้องการที่จะทำงานบนภาชนะทั้งหมด
อาจเป็นกรณีพิเศษที่หายากในประสบการณ์ของคุณแต่ในความเป็นจริงทั้งคอนเทนเนอร์ เป็นกรณีพิเศษและช่วงโดยพลการเป็นกรณีทั่วไป
คุณสังเกตเห็นแล้วว่าคุณสามารถใช้งานคอนเทนเนอร์ทั้งหมดได้โดยใช้อินเตอร์เฟสปัจจุบัน แต่คุณไม่สามารถสนทนาได้
ดังนั้นตัวเขียนไลบรารีจึงมีตัวเลือกระหว่างการนำอินเตอร์เฟสสองอินเตอร์เฟสไปด้านหน้าหรือใช้เฉพาะส่วนที่ยังครอบคลุมทุกกรณี
มันง่ายที่จะเขียนฟังก์ชั่น wrapper ซึ่งใช้คอนเทนเนอร์และการเริ่มต้น () และ end () บนมัน แต่ฟังก์ชั่นความสะดวกสบายดังกล่าวไม่รวมอยู่ในไลบรารีมาตรฐาน
จริงโดยเฉพาะอย่างยิ่งตั้งแต่ฟังก์ชั่นฟรีstd::begin
และstd::end
รวมอยู่ในขณะนี้
ดังนั้นสมมติว่าห้องสมุดให้ความสะดวกสบายเกินพิกัด:
template <typename Container>
void sort(Container &c) {
sort(begin(c), end(c));
}
ตอนนี้มันยังต้องการให้เกินพิกัดเทียบเท่ากับการเปรียบเทียบ functor และเราจำเป็นต้องให้เทียบเท่าสำหรับอัลกอริทึมอื่น ๆ
แต่อย่างน้อยเราก็ครอบคลุมทุกกรณีที่เราต้องการที่จะทำงานบนที่เก็บเต็มใช่ไหม? ก็ไม่มาก พิจารณา
std::for_each(c.rbegin(), c.rend(), foo);
ถ้าเราต้องการจัดการกับการปฏิบัติการย้อนกลับบนคอนเทนเนอร์เราต้องการวิธีอื่น (หรือวิธีการคู่) ต่ออัลกอริทึมที่มีอยู่
ดังนั้นวิธีการที่อิงกับช่วงจึงกว้างกว่าในแง่ที่ง่าย ๆ ว่า:
- มันสามารถทำทุกสิ่งได้ทั้งเวอร์ชั่นคอนเทนเนอร์
- วิธีการทั้งคอนเทนเนอร์สองเท่าหรือสองเท่าจำนวนเกินพิกัดที่ต้องการในขณะที่ยังคงมีประสิทธิภาพน้อยลง
- อัลกอริธึมที่อิงตามช่วงนั้นยังสามารถจัดเรียงได้ (คุณสามารถสแต็กหรืออะแด็ปเตอร์ตัววนซ้ำได้แม้ว่านี่จะเป็นภาษาที่ใช้งานได้จริงและ Python)
มีอีกเหตุผลที่ถูกต้องของหลักสูตรซึ่งเป็นว่ามันเป็นเรื่องอยู่แล้วเป็นจำนวนมากของการทำงานเพื่อให้ได้มาตรฐาน STL และพองด้วยความสะดวกสบายห่อก่อนที่มันจะได้รับการใช้กันอย่างแพร่หลายจะไม่ใช้งานที่ดีของเวลาคณะกรรมการ จำกัด หากคุณสนใจคุณสามารถดูรายงานทางเทคนิคของ Stepanov & Lee ได้ที่นี่
ตามที่ระบุไว้ในความคิดเห็นBoost.Rangeให้วิธีการที่ใหม่กว่าโดยไม่ต้องมีการเปลี่ยนแปลงมาตรฐาน