C++ 模板函数检查 vector 是否包含该值?

标签 c++ templates

我计划为所有类型实现一种类似于 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/

相关文章:

c++ - C++动态Release库和Debug库有什么区别?

c++ - 在 C++ 中检测本地网络上的客户端-服务器连接设备

C++ variadic templates fold expression 收藏

Perl - 模板工具包 - 如何获取模板中的变量列表?

node.js - gulp tap 进入无限循环

c++ - 模板结构中的友元运算符引发重新定义错误

c++ - 使用 rapidjson 进行字符串化

c++ - 两种创建二维数组的方法之间的区别

c++ - 在父类的Update方法中添加东西

templates - 使用 Liquid 将名称大写,不适用于特殊字符