gpt4 book ai didi

用于测试 vector 组合的 C++17 折叠语法

转载 作者:行者123 更新时间:2023-12-02 03:30:05 26 4
gpt4 key购买 nike

vector anyall的标准C++17实现:

template<class C, class T>
bool contains(const C& c, const T& value) {
return std::find(c.begin(), c.end(), value) != c.end();
}

template<class C, class... T>
bool any(const C& c, T&&... value) {
return (... || contains(c, value));
}

template<class C, class... T>
bool all(const C& c, T&&... value) {
return (... && contains(c, value));
}

用法如下

std::array<int, 6> data0 = { 4, 6, 8, 10, 12, 14 };
assert( any(data0, 10, 55, 792));
assert( !any(data0, 11));

assert( all(data0, 6, 14, 8));
assert( !all(data0, 6, 7, 8));

是否有一种类似的方法来定义only,当且仅当 vector 的唯一值集与输入值匹配时才返回 true?因此以下断言成立

std::array<int, 6> data1 = { 1, 1, 2, 1, 2 };
assert( only(data1, 1, 2));
assert( !only(data1, 1));

最佳答案

您可以提供一个count函数:

template<class C, class T>
auto count(const C& c, const T& value) {
return std::count(c.begin(), c.end(), value);
}

并像这样写only:

template<class C, class... T>
bool only(const C& c, T&&... value) {
return (count(c, value) + ...) == c.size();
}

这会处理 c 中的重复元素,但要求是唯一的。

这是一个demo .

关于用于测试 vector 组合的 C++17 折叠语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62305516/

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