2009-03-25 12 views
37

यदि front() एक संदर्भ देता है और कंटेनर खाली है, तो मुझे क्या अनिश्चित संदर्भ मिलता है? क्या इसका मतलब है कि मुझे प्रत्येक front() से पहले empty() जांचना होगा?खाली स्टडी कंटेनर के सामने() से मुझे क्या मिलता है?

उत्तर

41

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

+0

आप खाली() का भी उपयोग कर सकते हैं। –

+1

मेरी इच्छा है कि वे एसटीएल डिज़ाइन और निर्दिष्ट करते समय अधिक विशिष्ट रहे हों। मुझे लगता है कि बड़ी संख्या में सी ++ पोर्टिंग मुद्दों और बग प्लेटफार्मों के कारण होते हैं-इन्हें अच्छे प्रोग्रामर द्वारा शोषित इन "अपरिभाषित व्यवहार" के कार्यान्वयन को निर्दिष्ट करते हैं। –

+0

कुछ यूबी बनाने का निर्णय आमतौर पर वैकल्पिक रूप से कुछ ओवरहेड होता है - इस मामले में अपवाद फेंकना, जो सी ++ हमेशा से बचने का प्रयास करता है। –

12

आप अपरिभाषित व्यवहार मिलता है।

पर सीमा जाँच उपयोग प्राप्त करने के लिए (0)। यदि यह विफल रहता है तो आपको out_of_range अपवाद मिलता है।

1

तुम हमेशा सुनिश्चित करें कि आपके कंटेनर सामने() इस उदाहरण पर कॉल करने से पहले खाली नहीं है होना जरूरी है। एक सुरक्षित गार्ड के रूप में खाली कॉल करना अच्छा है।

बेशक, आपके प्रोग्राम डिज़ाइन के आधार पर, हमेशा एक गैर-खाली कंटेनर होने पर एक आविष्कारशील कथन हो सकता है जिससे आप प्रत्येक बार कॉल() को कॉल() पर कॉल को रोकने और सहेजने की अनुमति देते हैं। (या कम से कम अपने कोड का कुछ हिस्सा? में)

लेकिन जैसा कि ऊपर कहा गया है, अगर आप अपने कार्यक्रम में undefinied व्यवहार से बचना चाहते हैं, यह एक मजबूत अपरिवर्तनीय हैं।

2

हाँ, आप ग्राहम की तरह बजाय सामने का उपयोग करने का उल्लेख किया है 'पर' का उपयोग कर सकते हैं।

लेकिन, पर (0) कुछ कंटेनरों के लिए ही उपलब्ध है - वैक्टर, Deque और नहीं दूसरों के लिए - सूची, कतार, ढेर। इन मामलों में आपको 'खाली' चेक की सुरक्षा पर वापस आना होगा।

संबंधित मुद्दे