加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 遍历所有值

发布时间:2020-12-16 10:21:14 所属栏目:百科 来源:网络整理
导读:这可能是一个奇怪的问题,但是如何很好地循环一个类型的所有值.特别是标准积分类型,如unsigned short.正常的for循环结构存在一个难点:用于退出循环的条件 – 因为所有值都是有效的. 当然,有几种方法可以完成工作.退出最后一个值,然后在循环后处理.使用更大的
这可能是一个奇怪的问题,但是如何很好地循环一个类型的所有值.特别是标准积分类型,如unsigned short.正常的for循环结构存在一个难点:用于退出循环的条件 – 因为所有值都是有效的.

当然,有几种方法可以完成工作.退出最后一个值,然后在循环后处理.使用更大的int来计算.问题是,有更优雅的方式吗?

解决方法

如果你想要一个漂亮的解决方案,你可以这样做:

for(auto x : everyvalue<short>()) {
  std::cout << x << 'n';
}

每个值都是:

#include <limits>
template<typename T>
struct everyvalue {
  struct iter {
    T x;
    bool flag;
    inline iter operator++() {
      if(x == std::numeric_limits<T>::max())
        flag = true;
      else
        ++x;
      return *this;
    }
    inline T operator*() { return x;}
    inline bool operator!=(iter& i) {return flag != i.flag;}
    // note: missing some iterator requirements,still should work
  };
  inline iter begin() { return iter{std::numeric_limits<T>::min(),0}; }
  inline iter end() { return iter{std::numeric_limits<T>::max(),1}; }
};

否则,首选简单的休息时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读