2017-10-16 4 views
0

例私は整数値を持つベクトルを持っています。私は自分のランタイム入力を指定するベクトルの要素を数えません。 試験ベクトルにはelemets 10,20,30,40 があり、実行時には入力kを受けています。 >を満足する数を数えたい> k私自身のパラメータに基づいてcount_ifを使用したい

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)); 

構造関数の作成方法は? > kを満たす要素の総数を表示したい。

+1

C++ 11以前:

は、ここでそれがC++ 98で行うことができる方法のデモですか? – Surt

+1

ラムダ式を使用します。ここの例を参照してください - http://en.cppreference.com/w/cpp/algorithm/count – Praetorian

答えて

2

これはラムダ関数で解決できます。 count_if関数はvectorshivaを反復し、各要素をλ関数にint iとして渡します。ラムダ関数は、ikより大きいかどうかをチェックし、boolを返します。 kの値は、値kをキャプチャに[k]と指定することで取得できます。

#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あなたが正しいです。 – Chiel

+0

C++ 11でのみ貴重なコメントをいただきありがとうございますが、どうすればよいですか現在のシナリオでは –

+0

@ ShivamPandeyです。 C++ 11を使用することはできませんか? – Chiel

2

ラムダは、オーバーロードされた演算子()を持つ構造体の単なる構文糖です。

#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

構造体を 'main'のスコープで宣言してみませんか? – Chiel

+0

したがって、必要に応じて、メインの外で再利用することができます。いずれの方法でも、要件に応じて動作します。 – rustyx

関連する問題