"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या आधुनिक C++ कार्यान्वयन में `std::list::size()` सचमुच O(1) है?

क्या आधुनिक C++ कार्यान्वयन में `std::list::size()` सचमुच O(1) है?

2024-11-17 को प्रकाशित
ब्राउज़ करें:876

Is `std::list::size()` Truly O(1) in Modern C   Implementations?

क्या std::list::size() वास्तव में आधुनिक कार्यान्वयन में O(n) है?

हाल ही में, कुछ डेवलपर्स ने सुझाव दिया है कि std::list::size() में एक रैखिक समय जटिलता (O(n)) है। हालाँकि, सी मानक के अनुसार, जटिलता परिभाषित नहीं है और कार्यान्वयन के आधार पर भिन्न हो सकती है।

सी मानक (सी 03) के पुराने संस्करणों में, आकार() ऑपरेशन को निरंतर जटिलता रखने की सिफारिश की गई थी (ओ(1)). हालाँकि, C 11 की शुरूआत के साथ, यह सभी मानक कंटेनरों के लिए एक आवश्यकता बन गई। सी 11 मानक की तालिका 96 स्पष्ट रूप से बताती है कि .size() में सभी कंटेनरों के लिए निरंतर जटिलता होनी चाहिए।

ऐतिहासिक रूप से, GCC की libstdc लाइब्रेरी ने std::distance(begin) का उपयोग करके जटिलता O(n) के साथ size() लागू किया (), अंत()), जैसा कि आपके द्वारा उद्धृत ब्लॉग प्रविष्टि में वर्णित है। हालाँकि, C 11 मोड में, यह व्यवहार बदल गया है:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return __size_alloc_.first(); }

_LIBCPP_INLINE_VISIBILITY
const size_type& __sz() const _NOEXCEPT
    {return __size_alloc_.first();}

GCC 5.0 और इसके बाद के संस्करण में, size() फ़ंक्शन तत्वों की संख्या पर नज़र रखने के लिए एक आंतरिक डेटा संरचना का उपयोग करता है, जिससे ऑपरेशन प्रभावी ढंग से O(1) हो जाता है। यह सभी मानक कंटेनरों के लिए सी 11 आवश्यकता के अनुरूप है।

यह ध्यान रखना महत्वपूर्ण है कि कुछ विशिष्ट उपयोग के मामले अभी भी आकार() के लिए ओ(एन) जटिलता का कारण बन सकते हैं, लेकिन अधिकांश उपयोगकर्ताओं के लिए, संचालन निरंतर समय होना चाहिए।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3