首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历整个范围的计数器的/wo溢出?

如何遍历整个范围的计数器的/wo溢出?
EN

Stack Overflow用户
提问于 2014-11-09 18:23:05
回答 1查看 121关注 0票数 2

如何对某个类型的每个成员执行循环主体?我知道我可以在循环之后为maxval重复循环的主体,但这将是重复代码,这是不好的。我也可以用身体做一个函数,但对我来说也是错误的,因为函数应该是小的,简单的,并且循环的身体是巨大的。

代码语言:javascript
复制
const auto minval = std::numeric_limits<T>::min();
const auto maxval = std::numeric_limits<T>::max();
for (auto i = minval; i < maxval; ++i) {
    // huge body of the loop
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-09 20:27:48

它就像在处理最后一项之后停止一样简单:

代码语言:javascript
复制
auto i = minval;
while(1) {
    // do all the work for `i`


    if (i == maxval) break;
    ++i;
}

还可以将增量移动到循环的顶部,前提是在第一次传递时跳过它:

代码语言:javascript
复制
i = minval;
switch (1) {
case 0:
    do {
        ++i;
case 1:
        // processing for `i`
    } while (i != maxval);
}

后一种版本更直接地转换为高效的机器代码,因为每个循环迭代只有一个条件分支,并且有一个无条件的分支,而在第一个循环中,有一个条件分支和一个无条件的分支,它们都重复每次迭代。

两个版本都不会增加最终值,这可能是未定义的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26831625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档