सामग्री पर जाएँ
Topos Uranos

सारांश

यह पाठ पाठ्यक्रम की छठी इकाई को समाप्त करता है, जो संयुक्त डेटा को समर्पित है। यह अवधारणाओं की उस शृंखला को फिर से गढ़ता है जो इंडेक्स वाले अनुक्रम से रिकॉर्ड तक जाती है, और रास्ते में बढ़ने वाले अनुक्रम, एल्गोरिदम की लागत, खोजने और क्रमबद्ध करने तथा तालिकाओं से होकर गुज़रती है; इनमें से जो किसी भी भाषा में लागू होता है उसे उससे अलग करता है जो C++ का अपना है; इकाई के अपरिभाषित व्यवहार को एकत्र करता है, साथ में यह भी कि लाइब्रेरी क्या रोकती है, डिटेक्टर क्या रोकता है और किसकी ओर कोई संकेत नहीं करता; अपने समापन मूल्यांकन में प्रवेश मूल्यांकन के कौशल दोहराता है; और छह चुनौतियों के साथ समाप्त होता है जो पूरी इकाई को जोड़ती हैं।

अधिगम उद्देश्य

  1. संग्रहों और सत्ताओं को उपयुक्त प्रकार (ऐरे, वेक्टर, तालिका या रिकॉर्ड) से निरूपित करना, और डेटा के स्वरूप से चुनाव का औचित्य बताना।
  2. संग्रहों को सही एल्गोरिदमों से संसाधित करना, जो या तो हाथ से लिखे गए हों और निश्चर से उचित ठहराए गए हों, या लाइब्रेरी से लिए गए हों और उनकी पूर्व-शर्तों का पालन करते हों।
  3. एल्गोरिदम की लागत का अनुमान उसकी प्रभावी संक्रियाओं को गिनकर लगाना, और अनुमान की जाँच एक माप से करना।
  4. इकाई के अपरिभाषित व्यवहार (सीमाओं के बाहर पहुँच, अमान्य रेफ़रेंस, ओवरफ़्लो होने वाला मध्य बिंदु, लाइब्रेरी की उल्लंघित पूर्व-शर्त) को पहचानना और प्रोग्राम को उसके बिना फिर से लिखना।
  5. इकाई में सीखी गई बातों में से, जो किसी भी भाषा में लागू होता है उसे उससे अलग करना जो C++ का अपना है।

इकाई की उपलब्धियाँ

इकाई का लक्ष्य था डेटा के संग्रहों को निरूपित करना और उन्हें बुनियादी एल्गोरिदमों से संसाधित करना सिखाना, यह अनुमान लगाते हुए कि उनकी लागत कितनी है। यह लक्ष्य केवल उन बातों के सहारे पूरा हुआ जिन्हें परिचय ने ज्ञात घोषित किया था: निश्चर वाले लूप, फ़ंक्शन और उन्हें पास करने के तरीके, पूर्णांकों का अंकगणित। अंकों का प्रोग्राम, जो पाँच चरों के साथ अतिरिक्त डेटा के बारे में चुप रहता था, अब एक वेक्टर से लिखा जाता है; और बराबर मानों का प्रश्न, जिसके लिए सभी जोड़ियों की तुलना से दस लाख डेटा पर मिनटों की ज़रूरत पड़ती थी, अब क्रमबद्ध करके और पड़ोसियों की तुलना करके हल होता है।

ऐरे

पाठ ऐरे ने std::array प्रस्तुत किया, नियत आकार का अनुक्रम, जिसके इंडेक्स शून्य से गिने जाते हैं क्योंकि वे ऑफ़सेट हैं। उसने स्थापित किया कि इंडेक्स ii तभी और केवल तभी मान्य है जब 0≤i<n0 \leq i < n, कि [] से हर पहुँच के लिए इसे लूप के निश्चर से सिद्ध करना आवश्यक है, और कि सीमाओं के बाहर पहुँच अपरिभाषित व्यवहार है, जिसे .at() एक परिभाषित रोक में बदल देता है; उसने std::size_t प्रस्तुत किया और C ऐरे पढ़ना सिखाया।

वेक्टर

पाठ वेक्टर ने वह अनुक्रम प्रस्तुत किया जो push_back से बढ़ता है, और तय किया कि किसी शृंखला को कब सहेजना ज़रूरी है: जब किसी डेटा के बारे में कोई निर्णय बाद के डेटा पर निर्भर करता हो। उसने मानक ट्रैवर्सल (संचय, फ़िल्टर, रूपांतरण) उनके निश्चरों और लाइब्रेरी में उनके संक्षिप्त रूपों (std::ranges::count, std::ranges::max, std::ranges::fold_left) के साथ स्थापित किए, वेक्टर को पास करने का नियम, और आकार तथा क्षमता का अंतर, जिससे push_back की औसतन स्थिर लागत निकलती है और यह भी कि वेक्टर के दूसरी जगह स्थानांतरित होने पर रेफ़रेंस अमान्य हो जाते हैं।

एल्गोरिदम की लागत

पाठ एल्गोरिदम की लागत ने दूसरा प्रश्न जोड़ा: सबसे बुरी स्थिति में प्रभावी संक्रिया को गिनना, वृद्धि की कोटि के अनुसार वर्गीकृत करना, nn को दुगुना करने के प्रभाव की भविष्यवाणी करना और std::chrono::steady_clock से मापना, ऑप्टिमाइज़ेशन के साथ, डिटेक्टरों के बिना, दोहराकर और माध्यिका लेकर।

खोजना और क्रमबद्ध करना

पाठ खोजना और क्रमबद्ध करना ने द्विआधारी खोज का औचित्य उसके निश्चर और उसके माप से दिया; सिलेक्शन सॉर्ट और इंसर्शन सॉर्ट लिखे, उनकी तुलनाओं को गिनते हुए; रेंज के एल्गोरिदम क्रम की पूर्व-शर्त के साथ प्रस्तुत किए, जिसकी जाँच कोई नहीं करता; और गणना की कि खोजने से पहले क्रमबद्ध करना कब लाभदायक है।

तालिकाएँ

पाठ तालिकाएँ ने तालिकाओं को पंक्तियों और स्तंभों के अनुसार ट्रैवर्स किया, परिवर्त और आव्यूहों का गुणनफल परिकलित किया, उसकी त्रिघाती लागत के साथ, किनारों से बाहर गए बिना पड़ोसियों को गिना और एक तालिका को एक फ़्लैट वेक्टर में इंडेक्स i⋅columns+ji \cdot \mathit{columns} + j के साथ रखा।

रिकॉर्ड

पाठ रिकॉर्ड ने समानांतर वेक्टरों की जगह struct रखा, हर फ़ील्ड में एक प्रारंभिक मान के साथ; रिकॉर्ड पास करना और लौटाना सिखाया, उन्हें किसी फ़ील्ड के अनुसार प्रक्षेप से क्रमबद्ध करना और खोजना, std::ranges::stable_sort से अनेक मानदंडों से क्रमबद्ध करना, और ऐसे रिकॉर्डों से किसी समस्या का मॉडल बनाना जिनमें रिकॉर्ड और वेक्टर हों।