2017-10-16 64 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

相关问题