att
att

Reputation: 643

What's wrong with this c++ template function

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

Answers (1)

Bob__
Bob__

Reputation: 12759

Ther are some problems:

  • The code uses 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

Related Questions