我只是在容器或字符串中迭代/下标值,看看这些值是否是我想要的。我只想知道哪种方式(在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;
}
答案 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"?