哪个版本的“查找事件”功能更快?

时间:2014-03-27 12:20:27

标签: c++ performance algorithm

我的算法不是很强。函数有两个版本,如果传递的字符串中有任何大写字母,则返回 首先不检查每次迭代的条件。第一次出现大写字母后第二次结束 哪个更快一般

bool isAnyCapLetters(const std::string &s) {
    int flag = 0;
    for (auto el : s)
        flag += isupper(el);
    return static_cast<bool>(flag);
}
bool isAnyCapLetters(const std::string &s) {
    for (auto el : s)
        if (isupper(el)) return true;
    return false;   
}

2 个答案:

答案 0 :(得分:3)

第二个提前返回,对于以大写字母开头的长字符串会更快。

答案 1 :(得分:3)

如果你有一个像This_is_a_useless_but_not_so_very_short_string_whooptifriggindoo这样的字符串,那么第一个函数将循环遍历所有的字符,并且必须在结尾处进行转换。第二个函数将看到第一个char是大写的,并且将立即返回而不进行任何强制转换。因此第二个功能会更快。