2017-10-16 2 views
0

Beispiel Ich habe einen Vektor mit ganzzahligem Wert und ich möchte keine Elemente in diesem Vektor zählen, die meine eigenen Laufzeiteingaben angeben. Prüfung Vektor hat elemets 10, 20, 30,40 und zur Laufzeit nehme ich Eingang k; und wollen zählen, die erfüllt> kIch möchte count_if basierend auf meinen eigenen Parametern verwenden

int ar[4]={10,44,36,14}; 
vector<int>shiva(ar,ar+4); 

int k; 
cin>>k; 
cout<<*count_if(shiva.begin(),shiva.end(),myfun(k)); 

Wie eine Strukturfunktion machen? Ich möchte insgesamt keine Elemente drucken, die> k erfüllen;

+1

C++ 11 oder früher? – Surt

+1

Verwenden Sie einen Lambda-Ausdruck, siehe Beispiel hier - http://en.cppreference.com/w/cpp/algorithm/count – Praetorian

Antwort

2

Sie können dies mit einer Lambda-Funktion lösen. Die count_if-Funktion iteriert durch vectorshiva und übergibt jedes Element als int i in die Lambda-Funktion. Die Lambda-Funktion prüft, ob i größer als k ist und gibt eine bool zurück. Es kennt den Wert k, weil wir es zulassen, dass die Variable k nach Wert erfasst wird, indem das Capture als [k] angegeben wird.

#include <iostream> 
#include <algorithm> 
#include <vector> 

int main() 
{ 
    std::vector<int> shiva {10,44,36,14}; 

    int k; 
    std::cin >> k; 

    std::cout << std::count_if(shiva.begin(), 
           shiva.end(), 
           [k](int i) { return i > k; }) 
       << std::endl; 
    return 0; 
} 
+0

@RustyX. Du hast recht. – Chiel

+0

Es kann erlaubt werden Nur in C++ 11, danke für Ihren wertvollen Kommentar, aber wie kann ich das im aktuellen Szenario –

+0

@ShivamPandey tun. Darf C++ 11 nicht verwendet werden? – Chiel

2

Ein Lambda nur syntaktischer Zucker für eine Struktur mit einem überladenen Operator().

Hier ist eine Demo, wie kann es mit C++ 98 erfolgen:

#include <algorithm> 
#include <iostream> 
#include <vector> 

using namespace std; 

struct greater_than 
{ 
    int k; 
    greater_than(int k) : k(k) {} 
    bool operator() (int val) const { 
    return val > k; 
    } 
}; 

int main() 
{ 
    int ar[4] = { 10,44,36,14 }; 
    vector<int> shiva(ar, ar + 4); 

    int k; 
    cin >> k; 
    cout << count_if(shiva.begin(), shiva.end(), greater_than(k)) << endl; 
} 
+0

Warum deklarieren Sie die Struktur im Bereich von 'Haupt'? – Chiel

+0

So kann es bei Bedarf auch außerhalb des Main wiederverwendet werden. So oder so funktioniert, hängt von den Anforderungen ab. – rustyx

Verwandte Themen