2010-06-30 11 views
5

उदाहरण के लिए में:सभी सरणी तत्वों के साथ एक मूल्य की तुलना एक बयान

if (value == array[size]) //if the value (unique) is present in an array then do something 

इस एक बयान में किया जा सकता है एक समारोह या पाश बयान के लिए एक बुनियादी फोन के बिना?

+2

परिणाम वास्तव में क्या होना चाहिए, चाहे तत्वों में से कोई एक मूल्य है या वे सभी मूल्य हैं या नहीं? –

उत्तर

5

std::find एक बयान में यह कर सकते हैं, लेकिन यह अन्य भाषाओं :(

int array[10]; 
if (array + 10 != find(array, array + 10, 7)) { 
    cout << "Array contains 7!"; 
} 

या std::count साथ के रूप में के रूप में तुच्छ नहीं है:

if (int n = count(array, array + 10, 7)) { 
    cout << "Array contains " << n << " 7s!"; 
} 
+1

साफ, लेकिन साधारण चीजों को जटिल क्यों करें? जो कुछ भी नहीं खरीदता (प्रदर्शन या रीडबिबिली) –

+3

@ गॉलम, ओपी ने इसे एक बयान में पूछा, मैंने उसे एक बयान में दिया। ;) मैं व्यक्तिगत रूप से सरणी के लिए इस दृष्टिकोण का उपयोग नहीं करता। यह अन्य कंटेनरों के साथ, या 'युक्त' सहायक समारोह के साथ आसान है। – Stephen

+3

@ गॉलम, यह जटिल सी ++ कैसा है? क्या आप सुझाव देते हैं कि इस खोज को फैलाएं() अधिक लाइनों पर कॉल करें ?? – catchmeifyoutry

4

समस्या के आधार पर आप उपयोग कर सकते हैं set। इसमें count() नामक एक सदस्य फ़ंक्शन है जो आपको बताता है कि सेट में कुछ है:

if(myset.count(value) > 0){ 
    doThings(); 
} 
+0

और यदि आप सिर्फ यह जानना चाहते हैं कि यह एक या अधिक बार है: 'if (myset.find (value)! = Myset.end()) {/ * hooray! * /}' – Anthony

+0

@Duracell, सेट कर सकते हैं डुप्लिकेट नहीं है, इसलिए set.count 1 या 0 देता है। दोनों संस्करण बराबर हैं। –

+0

@ मैथ्यू, यह सच है। मुझे लगता है कि यह सिर्फ एक आदत है क्योंकि मैं उसी तरह से 'std :: map :: find' का उपयोग करता हूं। – Anthony

2

ऐसी कोई काम करने के लिए कोई अंतर्निहित ऑपरेटर नहीं है।

परीक्षण करने के कई तरीके हैं जो बाहर से एक ही कथन प्रतीत होता है। और इनमें से कुछ मानक पुस्तकालय द्वारा पहले से प्रदान किए गए हिस्सों का उपयोग करते हैं, ताकि आपको स्वयं को अधिक कोड लिखना पड़े। हालांकि, वे अनिवार्य रूप से कुछ बिंदुओं पर फ़ंक्शन कॉल और/या लूप का उपयोग करेंगे, जिसे आपने पहले ही अस्वीकार कर दिया था।

तो आपके प्रश्न में प्रतिबंध दिए गए: नहीं, कोई रास्ता नहीं है।

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