Reputation: 643
What can be wrong this piece of code. I'm trying to call countLessThan3 by instantiating with std::vector.
// 3. Lambdas
template<typename T>
const auto countLessThan3(const T & vec, int value)
{
const auto count = std::count(vec.begin(), vec.end(),
[](int i){ return i < 3;}
);
return count;
}
int main(int argc, char const *argv[])
{
// 3
std::vector<int> vector = {1, 2, 3, 4, 5, 2, 2, 2};
countLessThan3<std::vector<int>>(vector, 3);
return 0;
}
compiled with g++ -std=c++14 1.cpp -o 1 on linux.
Upvotes: 0
Views: 66
Reputation: 12759
Ther are some problems:
std::count
, but a lambda is passed, so it should be std::count_if
instead.value
is passed to the function as a parameter, but it is not used and there is an hard coded 3
in the lambda.Other minor issues are fixed in the snippet below
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T>
auto countLessThan(const T & vec, typename T::value_type value)
{
return std::count_if(vec.begin(), vec.end(),
[value](typename T::value_type i){ return i < value;}
);
}
int main()
{
std::vector<int> vector = {1, 2, 3, 4, 5, 2, 2, 2};
std::cout << countLessThan(vector, 3) << '\n';
return 0;
}
Upvotes: 4