2010-06-30 23 views
5

tüm dizi öğelerinin birlikte bir değer karşılaştırın?bir deyimi Örneğin

+2

Öğelerden biri değer mi, yoksa hepsi değer mi olsun, sonuç tam olarak ne olmalıdır? –

cevap

5

std::find bir açıklamada yapabilirsiniz, ancak diğer diller :(

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

Ya std::count ile olduğu kadar önemsiz değil:

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

neat, ama basit şeyleri neden karmaşık? hiçbir şey satın almayan (performace veya readibilty) –

+3

@Gollum, OP bir açıklamada bunu istedi, ona tek bir açıklamada verdim. ;) Diziler için bu yaklaşımı kişisel olarak kullanmam. Diğer kaplarla veya 'içerir 'yardımcı işleviyle daha basittir. – Stephen

+3

@Gollum, bu nasıl karmaşık C++? Bu find() çağrısını daha fazla satıra yaymanızı öneriyor musunuz? – catchmeifyoutry

4

soruna bağlı olarak, kullanmak isteyebilirsiniz . count() adlı bir üye işlevinde, kümede bir şey olup olmadığını bildiren bir işlev bulunur:

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

Ve eğer bir veya daha fazla kez var mı bilmek istiyorsanız: 'if (myset.find (value)! = Myset.end()) {/ * hooray! * /}' – Anthony

+0

@Duracell, çiftleri var, yani set.count 1 veya 0 döndürür. Her iki sürüm de eşdeğerdir. –

+0

@Matthew, bu doğru. Sanırım sadece bir alışkanlık çünkü std :: map :: find 'kelimesini aynı şekilde kullanıyorum. – Anthony

2

Böyle bir şey yapabilecek yerleşik operatör yok.

Testi, dışarıdan tek bir açıklama gibi görünen bir şekilde gerçekleştirmenin birçok yolu vardır. Bazıları zaten standart kütüphane tarafından sağlanan parçaları kullanır, böylece çok fazla kod yazmak zorunda kalmazsınız. Ancak, kaçınılmaz olarak, zaten kararlaştırdığınız bir noktada, bir tür işlev çağrısı ve/veya döngü kullanırlar.

Sorunuzdaki kısıtlamalar dikkate alındığında: Hayır, hiçbir yolu yoktur.