【发布时间】:2019-11-27 21:05:13
【问题描述】:
这段代码有什么问题。 我正在尝试通过使用 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 编译。
【问题讨论】:
-
它做错了什么?
-
std::count没有重载,它将谓词作为第三个参数。 -
是否假定您总是与整数进行比较?如果 T 类型是非 int 的容器怎么办?您将 T& 类型命名为 vec。它总是会是一个vec吗? const auto countLessThan3(std::vector
& vec, T value) 可能更有用。
标签: c++ c++11 templates lambda