我计划为所有类型实现一种类似于 FORTRAN 中的 INDEX 函数。 这是一个正确的解决方案吗? 评论后进行一点编辑。
template <typename T>
bool contains(std::vector<T>& vec, T value){
if (std::any_of(vec.begin(), vec.end(), [value](T j) { return value == j; }))return true;
return false;
}
注意 泛型实现的浮点类型比较存在一个陷阱!
最佳答案
是的,这是一个有效的实现,但我会以不同的方式编写它
template <std::ranges::input_range R, typename T>
requires std::indirect_binary_predicate<ranges::equal_to, ranges::iterator_t<R>, const T*>
bool index(R&& range, const T & value){
return std::ranges::find(range, value) != std::ranges::end(range);
}
这适用于任何序列以及可以与该序列的元素进行比较是否相等的任何值。
在 C++11 中,没有明确要求的概念,但情况类似
template <typename R, typename T>
bool index(R&& range, const T& value) {
using std::begin, std::end;
return std::find(begin(range), end(range), value) != end(range);
}
关于C++ 模板函数检查 vector 是否包含该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69941557/