c ++ - 在容器中搜索元素的方法更有效

时间:2016-11-29 06:28:03

标签: c++ visual-c++

我只是在容器或字符串中迭代/下标值,看看这些值是否是我想要的。我只想知道哪种方式(在number1和number2之间)更有效。

bool isnumber (const char character)
{
    return(character>=48 && character<=57);             
}

template <typename T> bool numbers1(const T &str)
{
    if(!str.empty())
    {
        for (auto it=str.cbegin(); it!=str.cend(); ++it) if (!isnumber(*it)) return false;

        return true;
    }
    else return false;
}

template <typename T> bool numbers2(const T &str)
{
    if(!str.empty())
    {
        for (auto &i : str) if(!isnumber(i)) return false;

        return true;
    }
    else return false;
}

1 个答案:

答案 0 :(得分:0)

C ++中基于范围的for循环基本上只是使用begin()和end()的循环的简写,通常是迭代器。在numbers2中,编译器扩展循环以使用str.begin和str.end。编译级别唯一真正的区别是你的手写迭代器循环使用cbegin()和cend()而不是begin()和end()。

进一步阅读:如果你创建了一个实现begin()和end()的类,那么你将能够在该类上执行基于范围的for循环:How to make my custom type to work with "range-based for loops"?