我的理解是,以下函数中三元运算符计算的类型是
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;
}
你可以彻底翻转算法。您可以重用标准算法获得奖励积分:
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;
});
}