2010-08-23 15 views
19

हाय मैं एक कार्यक्रम वैक्टर और इन वैक्टर के तत्वों के सूचकांक बहुत सौदों कि है, और मैं सोच रही थी:C++ uint, अहस्ताक्षरित int, इंट

  1. वहाँ uint और unsigned int
  2. बीच एक अंतर है
  3. जो उपर्युक्त प्रकारों में से किसी एक का उपयोग करना बेहतर है या बस int का उपयोग करें क्योंकि मैंने कुछ लोगों को बताया है कि कंपाइलर int मूल्यों को अधिक कुशलता से संभालता है, लेकिन अगर मैंने int का उपयोग किया तो मुझे हमेशा नकारात्मक आईडीक्स के लिए जांच करनी होगी।
  4. क्या आपको लगता है कि यह बेहतर है? क्या यह सामान्य अनुक्रमण vectorx[idx] से अधिक कुशल है?

पी.एस सॉफ्टवेयर बड़े डेटा प्रक्रियाओं को संभालेगा और अच्छा प्रदर्शन है एक आवश्यकता होनी चाहिए

उत्तर

29
  1. सी ++ में ऐसी कोई प्रकार परिभाषित करता है uint के रूप में। यह "आपका" प्रकार होना चाहिए, यानी आपके कोड या कुछ तृतीय पक्ष लाइब्रेरी में परिभाषित एक प्रकार होना चाहिए। कोई अनुमान लगा सकता है कि यह unsigned int जैसा ही है। हालांकि unsigned long int हो सकता है या कुछ और। वैसे भी, आपको इसे स्वयं जांचना होगा।

  2. यह व्यक्तिगत शैली का मामला है। उदाहरण के लिए, मेरा मानना ​​है कि किसी को आकार या मात्रा जैसे स्वाभाविक रूप से गैर-ऋणात्मक मानों का प्रतिनिधित्व करने के लिए हस्ताक्षरित प्रकारों का उपयोग करना होगा। कुछ विशिष्ट संदर्भों के अलावा, हस्ताक्षरित और हस्ताक्षरित प्रकारों के बीच प्रदर्शन में कोई अंतर नहीं है। मैं कहूंगा कि ज्यादातर मामलों में यह हस्ताक्षर प्रकार है जो अधिक कुशलता से संभाला जाएगा।

  3. इटरेटर कार्यान्वयन को अधिक सामान्य बनाते हैं, यानी आप अनुक्रमिक-पहुंच पुनरावर्तक का उपयोग कर सकते हैं और इस प्रकार आपके कार्यान्वयन को किसी अनुक्रमिक डेटा संरचना पर लागू कर सकते हैं। इंडेक्स का उपयोग करके आप डेटा संरचना पर यादृच्छिक-पहुंच आवश्यकता लागू करते हैं, जो एक मजबूत आवश्यकता है। जब उनके लिए कोई वास्तविक आवश्यकता नहीं है तो मजबूत आवश्यकताओं को लागू करना एक अच्छा विचार नहीं है।

+1

@AndreyT: मैं donno आदमी लेकिन मैं नेटबीन, जीसीसी कंपाइलर का उपयोग कर रहा हूं, और मैंने पहले से ही यूंट के साथ कोड किया है और यह बिना किसी libs के काम कर रहा है। 2 और 3 अंक बहुत ही जानकारीपूर्ण धन्यवाद बहुत हैं :) –

+14

'uint' को अधिकांश कंपाइलरों द्वारा' हस्ताक्षरित int 'के लिए एक शॉर्टेंड के रूप में टाइप किया गया है। – You

+2

किसी भी मामले में, यह इस तथ्य को नहीं बदलेगा कि 'यूंट' जैसे न तो सी में और न ही सी ++ में, जब तक कोई विशिष्ट कंपाइलर नहीं माना जाता है, तो 'यूंट' के बारे में प्रश्न का कोई सार्थक उत्तर नहीं होता है। – AnT

3

यदि आप क्रमशः वेक्टर के माध्यम से लूपिंग कर रहे हैं, तो हर तरह से, इटरेटर का उपयोग करें। सूचकांक प्रकार के बावजूद इंडेक्सिंग से संबंधित ओवरहेड है, जिसे पुनरावृत्त से बचा जा सकता है।

1

1) uint = unsigned int, वास्तव में uint केवल टाइप किए गए int के लिए है (संकलित समय पर हस्ताक्षरित int द्वारा प्रतिस्थापित किया जाएगा)।

2) यदि आप अपने कोड में कुछ "सुरक्षा" जाना चाहते हैं, तो आप निश्चित नकारात्मक मानों से बचेंगे।

3) यदि आप अनुक्रमिक रूप से वेक्टर के माध्यम से भागते हैं, तो इटरेटर के साथ जाएं, वे क्रमिक लूपिंग के लिए अनुकूलित हैं (वे किसी प्रकार के पॉइंटर्स हैं)।

+2

डाउनवोट के लिए पर्याप्त बुरा नहीं है, लेकिन 'uint' आमतौर पर एक' टाइपिफ़ 'होगा, मैक्रो नहीं, और हस्ताक्षरित बनाम हस्ताक्षरित सुरक्षा के साथ बहुत कम करना है (यदि कुछ भी सुरक्षा बग का कारण बन सकता है, क्योंकि कई हस्ताक्षर किए गए अंकगणितीय काम अलग-अलग हैं प्रोग्रामर उम्मीद करते हैं!) –

+0

आप टाइपिफ़ के लिए सही हैं (मैं इसे संशोधित करूंगा) सुरक्षा के द्वारा, मेरा मतलब है प्रोग्रामर के लिए सुरक्षा महसूस करना, संकलक से संबंधित कुछ भी नहीं, इसलिए मैंने "" – Arslan

0

के रूप में अन्य पोस्टर का उल्लेख किया है, uint शायद के लिए unsigned पूर्णांक एक typedef आप दृश्य स्टूडियो उपयोग कर रहे हैं है, तो आप जबकि पाठ कर्सर uint में है इसकी परिभाषा को देखने के लिए F12 दबाकर बहुत जल्दी है कि तथ्य की जांच कर सकते ।

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