gpt4 book ai didi

c++ - 如何编写模板来检查给定值是否在数组中

转载 作者:行者123 更新时间:2023-11-30 02:32:08 25 4
gpt4 key购买 nike

根据对 this previous question 的回答,我写了下面的模板,如果数组包含传递的值,它应该返回 true,否则返回 false。

template <typename Type>
bool Contains(const Type container[], const Type& value) {
return std::any_of(
std::begin(container), std::end(container),
[&value](const Type& contained_value) { return value == contained_value; });
}

当我尝试编译时,出现以下错误:

error: no matching function for call to 'begin'
std::begin(container), std::end(container),

是什么导致 std::begin 失败? std::begin documentation显示它适用于数组。在此特定实例中,我在枚举(而非枚举类)上实例化模板。

最佳答案

Contains 的类型错误,因此 container 被推断为 const int *& 没有覆盖标准:开始

g++ 的错误信息更清晰:

main.cpp: In instantiation of ‘bool Contains(const Type*, const Type&) [with Type = int]’: main.cpp:18:34: required from here

main.cpp:9:17: error: no matching function for call to ‘begin(const int*&)’

这是固定代码。您需要将数组作为数组类型 (int[3]) 传递,以便 std::end 从该类型计算出数组的长度。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

template <typename Type, std::size_t N>
bool Contains(Type (&container)[N], const Type& value) {
return std::any_of(
std::begin(container), std::end(container),
[&value](const Type& contained_value) { return value == contained_value; });
}

int main()
{
int a[] = {1,2,3};
int val = 1;
int val2 = 4;
bool result = Contains(a, val);
bool result2 = Contains(a, val2);
std::cout << result << std::endl;
std::cout << result2 << std::endl;
}

关于c++ - 如何编写模板来检查给定值是否在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36756531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com