避免三元运算符中不必要的复制

问题描述 投票:0回答:1

我的理解是,以下函数中三元运算符计算的类型是

std::string
,即它是一个值,而不是引用。

有一个技巧可以避免在评估第一个分支时复制字符串吗?

bool f(const std::vector<std::string>& vec, const std::string& s) {
    const std::string& s2 = !s.empty() && s[0] == '{' ? s : '{' + s + '}';
    for (const std::string& v : vec) {
        if (v == s2)
            return true;
    }
    return false;
}
c++ copy conditional-operator
1个回答
0
投票

你可以彻底翻转算法。您可以重用标准算法获得奖励积分:

bool f(std::vector<std::string> const& haystack, std::string const& needle) {
    using std::ranges::any_of;

    if (needle.starts_with('{'))
        return any_of(haystack, [&](std::string const& v) { return v == needle; });

    return any_of(haystack, [&](std::string_view v) { //
        return v.length() == needle.length() + 2      //
            && v.starts_with('{')                     //
            && v.ends_with('}')                       //
            && v.substr(1, needle.length()) == needle;
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.