आप अपने पाश की दक्षता के बारे में चिंतित हैं, तो मैं यह कोशिश करने के लिए आप से आग्रह करता हूं होगा:
इस कोड को संकलित और इस तरह के दृश्य स्टूडियो के रूप में, एक IDE के तहत चल रहा है, और शुरुआत में एक को तोड़ने बिंदु निर्धारित हो जाओ । जब आप वहां जाते हैं, तो डिस्प्लेब्स व्यू (निर्देश दृश्य) पर स्विच करें और F11 (सिंगल-स्टेप) कुंजी को मारना शुरू करें, और मानसिक गिनती रखें कि आप कितनी बार इसे मार रहे हैं।
आप देखेंगे कि यह लूप में प्रवेश करता है, i
की तुलना 25 के विरुद्ध करता है, और फिर cout
लाइन के लिए कोड करना शुरू करता है। इसमें letter
बढ़ाना शामिल है, और फिर <<
कोउट के लिए दिनचर्या में जा रहा है। यह वहां कई चीजें करता है, संभवतः सबराउटिन आदि में गहराई से जा रहा है, और आखिरकार एक वस्तु वापस लौटकर वापस आ जाता है। फिर यह "\t"
को तर्क के रूप में धक्का देता है और उसे उस ऑब्जेक्ट में भेजता है, और वापस जाता है और इससे पहले की गई सभी चीज़ें करता है। फिर यह number
लेता है, इसे बढ़ाता है, और cout::<<
दिनचर्या को पास करता है जो एक पूर्णांक स्वीकार करता है, इसे एक स्ट्रिंग में परिवर्तित करने के लिए फ़ंक्शन को कॉल करता है (जिसमें लूप शामिल होता है), फिर वह लूप से पहले की गई सभी चीजें करता है जो स्ट्रिंग में स्ट्रिंग करता है आउटपुट बफर और वापसी।
थक गए? आप अभी तक नहीं कर रहे हैं endl
को आउटपुट होना चाहिए, और जब ऐसा होता है, न केवल यह "\n"
बफर में डालता है, लेकिन यह सिस्टम रूटीन को उस बफर को फ़ाइल या कंसोल पर फ़्लश करने के लिए कहता है जहां आप I/O भेज रहे हैं। आप शायद उसमें एफ 11 नहीं कर सकते हैं, लेकिन बाकी आश्वासन दिया है कि यह बहुत सारे चक्र लेता है और आई/ओ पूरा होने तक वापस नहीं आता है।
अब तक, आपकी एफ 11-गिनती कई हज़ार, अधिक या उससे कम के आसपास होनी चाहिए।
अंत में, आप बाहर आते हैं और ++i
कथन प्राप्त करते हैं, जिसमें 1 या 2 निर्देश होते हैं, और अगले पुनरावृत्ति को शुरू करने के लिए लूप के शीर्ष पर वापस कूदते हैं।
अब, क्या आप अभी भी लूप की दक्षता के बारे में चिंतित हैं?
इस बिंदु को बनाने का एक आसान तरीका है, और यह केवल निर्देशक के रूप में है। अपने पूरे कोड के चारों ओर एक अनंत लूप लपेटें ताकि यह हमेशा के लिए चलता है। यह चल रहा है, आईडीई में "रोकें" बटन दबाएं, और कॉल स्टैक को देखें। (This is called a "stackshot".) यदि आप इसे कई बार करते हैं तो आपको एक अच्छा विचार मिलता है कि यह समय व्यतीत करता है। यहाँ एक उदाहरण है:
NTDLL! 7c90e514()
KERNEL32! 7c81cbfe()
KERNEL32! 7c81cc75()
KERNEL32! 7c81cc89()
MSVCRTD! 1021bed3()
MSVCRTD! 1021bd59()
MSVCRTD! 10218833()
MSVCRTD! 1023a500()
std::_Fputc() line 42 + 18 bytes
std::basic_filebuf<char,std::char_traits<char> >::overflow() line 108 + 25 bytes
std::basic_streambuf<char,std::char_traits<char> >::sputc() line 85 + 94 bytes
std::ostreambuf_iterator<char,std::char_traits<char> >::operator=() line 304 + 24 bytes
std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > >::_Putc() line 633 + 32 bytes
std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > >::_Iput() line 615 + 25 bytes
std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > >::do_put() line 481 + 71 bytes
std::num_put<char,std::ostreambuf_iterator<char,std::char_traits<char> > >::put() line 444 + 44 bytes
std::basic_ostream<char,std::char_traits<char> >::operator<<() line 115 + 114 bytes
main() line 43 + 96 bytes
mainCRTStartup() line 338 + 17 bytes
मैं इस समय का एक गुच्छा किया है, और नहीं एक बार जब यह बाहरी i<=25
पाश के लिए कोड में बंद हो गए। तो यह लूप अनुकूलित करना किसी के महान रूपक की तरह है: "वजन कम करने के लिए बाल कटवाने"।
धन्यवाद, मैं कुछ पन्नों आगे फ़्लिप और यह पूछता है मुझे लूप के लिए इसका उपयोग करके पुनर्निर्माण करने के लिए =)। – SlackerByNature
आह, स्वामी विधियां स्पष्ट हो जाती हैं –