这个c ++模板函数有什么问题

时间:2019-07-18 21:24:06

标签: c++ c++11 templates lambda

这段代码可能有什么问题。 我正在尝试通过std :: vector实例化来调用countLessThan3。

// 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;
}

在Linux上与g ++ -std = c ++ 14 1.cpp -o 1编译。

1 个答案:

答案 0 :(得分:4)

还有一些问题:

  • 代码使用std::count,但是传递了lambda,因此应改为std::count_if
  • value作为参数传递给函数,但未使用,并且lambda中有硬编码的3

其他小问题已在下面的代码段中解决

#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;
}