वहाँ 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 ++ पर एक त्वरित नज़र या तो इसके समान कुछ भी नहीं दिखाती है।