2010-06-30 17 views
5

Na przykład:Porównaj wartość ze wszystkich elementów tablicy w jednej instrukcji

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

można to zrobić w jednej instrukcji, bez konieczności wywoływania funkcji lub podstawowym dla instrukcji pętli?

+2

Czym dokładnie powinien być wynik, czy jeden z elementów ma wartość, czy też wszystkie są wartością? –

Odpowiedz

5

std::find może to zrobić w jednej instrukcji, ale to nie jest tak trywialne jak innych językach :(

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

lub std::count:

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

czysty, ale po co komplikować proste rzeczy? który niczego nie kupuje (performace lub readibilty) –

+3

@Gollum, OP poprosił o to w jednym oświadczeniu, dałem mu go w jednym oświadczeniu. ;) Nie osobiście używałbym tego podejścia do tablic. Jest prostsze w przypadku innych kontenerów lub funkcji pomocniczej 'zawiera'. – Stephen

+3

@ Gollum, jak to skomplikowane C++? Czy sugerujesz rozpowszechnianie tej funkcji find() przez więcej linii? – catchmeifyoutry

4

w zależności od problemu, można użyć a set. Ma funkcję składową o nazwie count(), która mówi, czy coś jest w zestawie:

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

A jeśli chcesz tylko wiedzieć, czy jest tam jeden lub więcej razy: 'if (myset.find (value)! = Myset.end()) {/ * hooray! * /}' – Anthony

+0

@Duracell, zestawy mogą nie ma duplikatów, więc set.count zwraca 1 lub 0. Obie wersje są równoważne. –

+0

@Matthew, to prawda. Przypuszczam, że to zwyczajny zwyczaj, ponieważ używam 'std :: map :: find' w ten sam sposób. – Anthony

2

Nie ma wbudowanego operatora, który mógłby to zrobić.

Istnieje wiele sposobów na sprawdzenie testu, który wydaje się być pojedynczym stwierdzeniem z zewnątrz. A niektóre z nich używają części już dostarczonych przez bibliotekę standardową, abyś sam nie musiał pisać dużo kodu. Jednak nieuchronnie będą używać jakiejś formy wywołania funkcji i/lub pętli w pewnym momencie, który już wykluczyliście.

Więc biorąc pod uwagę ograniczenia w pytaniu: Nie, nie ma mowy.

Powiązane problemy