वहाँ size_tऔर के बीच एक अंतर है container::size_type?
जो मैं समझता हूं size_tवह अधिक सामान्य है और किसी भी size_typeएस के लिए इस्तेमाल किया जा सकता है ।
लेकिन container::size_typeविशिष्ट प्रकार के कंटेनरों के लिए अनुकूलित है?
वहाँ size_tऔर के बीच एक अंतर है container::size_type?
जो मैं समझता हूं size_tवह अधिक सामान्य है और किसी भी size_typeएस के लिए इस्तेमाल किया जा सकता है ।
लेकिन container::size_typeविशिष्ट प्रकार के कंटेनरों के लिए अनुकूलित है?
जवाबों:
मानक कंटेनर को परिभाषित size_typeकरने के लिए एक typedef के रूप में Allocator::size_type(संभाजक टेम्पलेट पैरामीटर है), जिसके लिए std::allocator<T>::size_typeहै आम तौर पर होने के लिए परिभाषित किया गया size_tहै (या एक संगत प्रकार)। इसलिए मानक मामले के लिए, वे समान हैं।
हालाँकि, यदि आप एक कस्टम आवंटनकर्ता का उपयोग करते हैं तो एक अलग अंतर्निहित प्रकार का उपयोग किया जा सकता है। तो container::size_typeअधिकतम व्यापकता के लिए बेहतर है।
size_tउन बाधाओं का व्यावहारिक व्यावहारिक कार्यान्वयन था। हालाँकि, C ++ 11 में, अब इसे अनिवार्य रूप से परिभाषित किया गया है: std::make_unsigned<X::difference_type>::typeडिफ़ॉल्ट रूप से। व्यवहार में जो, शायद एक ही या संगत होगा size_t।
size_type। क्या देता है?
size_tएक वस्तु के आकार के लिए उपयोग किए जाने वाले प्रकार के रूप में परिभाषित किया गया है और प्लेटफ़ॉर्म आश्रित है ।container::size_typeवह प्रकार है जो कंटेनर में तत्वों की संख्या के लिए उपयोग किया जाता है और कंटेनर निर्भर है ।सभी stdकंटेनर के size_tरूप में उपयोग करते हैं size_type, लेकिन प्रत्येक स्वतंत्र पुस्तकालय विक्रेता एक प्रकार का चयन करता है जिसे वह अपने कंटेनर के लिए उपयुक्त पाता है।
अगर तुम देखो क्यूटी, आप पाएंगे कि size_typeक्यूटी कंटेनर संस्करण पर निर्भर है। Qt3 में यह था unsigned intऔर Qt4 में इसे बदल दिया गया था int।
intके बजाय ssize_t, intतरह छोटे की है।
के लिए std::[w]string, std::[w]string::size_typeके बराबर है std::allocator<T>::size_type, जो के बराबर है std::size_t। अन्य कंटेनरों के लिए, यह कुछ कार्यान्वित परिभाषित अहस्ताक्षरित पूर्णांक प्रकार है।
कभी-कभी यह सटीक प्रकार के लिए उपयोगी होता है, इसलिए उदाहरण के लिए कोई जानता है कि प्रकार कहाँ (जैसे UINT_MAX) से घूमता है ताकि कोई उसका उपयोग कर सके। या टेम्प्लेट के लिए, जहाँ आपको फ़ंक्शन / क्लास टेम्प्लेट में दो समान प्रकार पास करने की आवश्यकता होती है।
अक्सर मुझे लगता है मैं size_tसंक्षिप्तता या पुनरावृत्तियों के लिए वैसे भी उपयोग करते हैं। जेनेरिक कोड में, चूंकि आप आमतौर पर यह नहीं जानते हैं कि आपके टेम्पलेट का उपयोग किस कंटेनर उदाहरण के साथ किया गया है और उन कंटेनरों का आकार क्या है, Container::size_typeतो आपको कंटेनर आकार को संग्रहीत करने की आवश्यकता होने पर आपको टाइपपैड का उपयोग करना होगा ।
N1804और मैं अपने बीच के संबंध नहीं दिख रहा हैAllocator::size_typeऔरsize_type। Libstdc ++ पर एक त्वरित नज़र या तो इसके समान कुछ भी नहीं दिखाती है।