微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建一个方法来比较 C++ 中未知数量的字符串?

如何解决如何创建一个方法来比较 C++ 中未知数量的字符串?

经过一些研究,我发现在 C++ 中我可以通过这种方式创建一个具有无限变量的函数

template<typename ... Args>
void func(Args... a) {
    /* CODE */
}

我想制作一个方法来比较未知数量的字符串并给出一个布尔值:如果相等则为真,如果不相等则为假。

我做了类似的事情,但我不知道如何迭代字符串。

template<typename ... Strings>
bool cmp(string first,Strings... rest) {
    /* IteraTE AND COMPARE */

    return false;
}

那么我如何迭代它们?

解决方法

术语无限变量是不正确的。 C++ 可以处理可变数量的函数参数,但不能处理无限多个。

如果您可以使用 C++17,fold expression 将是最简单的解决方案:

template<typename ... Ts>
bool cmp(const std::string& first,const std::string& second,const Ts&... rest) {
    return (cmp(second,rest) && ... && (second == first));
}

再次使用 C++17,您也可以使用递归方法使用 if constepxr

template<typename ... Ts>
bool cmp(const std::string& first,const Ts&... rest) {
    if constexpr (!sizeof...(Ts)) {  // Do we have only two arguments left?
        return first == second;
    } else {
        return first == second && cmp(second,rest...);
    }
}

对于 C++14,您可以简单地重载两个参数版本并再次使用递归:

bool cmp(const std::string& first,const std::string& second) {
    return first == second;
}

template<typename ... Ts>
bool cmp(const std::string& first,const Ts&... rest) {
    return first == second && cmp(second,rest...);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。