2017-10-16 65 views
0

例如,我有一個整數值的向量,我想計算該向量中指定我自己的運行時輸入的元素no。 考試矢量元素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或更早版本? – Surt

+1

使用lambda表達式,請參閱此處的示例 - http://en.cppreference.com/w/cpp/algorithm/count – Praetorian

回答

2

你可以用lambda函數解決這個問題。 count_if函數遍歷vectorshiva並將每個元素作爲int i傳遞給lambda函數。 lambda函數檢查i是否大於k並返回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

lambda只是一個帶有重載操作符()的結構的語法糖。

下面是如何將其與C++ 98做一個演示:

#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

相關問題