【问题标题】:C++0x way to replace for(int i;;) range loops with range-based for-loopC++0x 用基于范围的 for 循环替换 for(int i;;) 范围循环的方法
【发布时间】:2011-06-23 05:44:57
【问题描述】:

所以我一直在使用 GCC 4.6 进入新的 C++,它现在具有基于范围的 for 循环。我发现这非常适合遍历数组和向量。

主要出于审美原因,我想知道是否有办法用它来代替标准

for(int i = min; i < max; i++) {}

类似

for(int& i : std::range(min, max)) {}

新的 C++ 标准中是否有内置的东西允许我这样做?还是我必须编写自己的范围/迭代器类?

【问题讨论】:

标签: c++ foreach for-loop c++11


【解决方案1】:

我在任何地方都看不到它。但这将是微不足道的:

class range_iterator : public std::input_iterator<int, int> {
    int x;
public:
    range_iterator() {}
    range_iterator(int x) : x(x) {}
    range_iterator &operator++() { ++x; return *this; }
    bool operator==(const range_iterator &r) const { return x == r.x; }
    int operator*() const { return x; }
};
std::pair<range_iterator, range_iterator> range(int a, int b) {
    return std::make_pair(range_iterator(a), range_iterator(b));
}

应该可以解决问题(在我的脑海中;可能需要一些调整)。一对迭代器应该已经是范围,所以我相信你不需要自己定义开始和结束。

【讨论】:

  • 你不妨把它做成Integer类型的模板。
  • @Matthieu 是的,当然。上面提到的另一个问题有一些更高级的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 2014-01-12
  • 1970-01-01
相关资源
最近更新 更多