我最近想知道 c++11 中基于范围的 for 循环的要求是什么,因为我只见过预期用法的示例:
for (auto person : people)
{
cout << person.name << endl;
}
但是鉴于容器只需要具有开始和结束方法,而根本不需要包含任何内容,那么以下内容是否会被视为“不好的做法”?如果不出意外,如果有人在面试中要求您提供斐波那契数列,这是一个新鲜的答案!
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
struct FibItr
{
FibItr(int cur = 1, int prev = 0) : mCur(cur), mPrev(prev) {}
FibItr & operator++()
{
mCur += mPrev;
mPrev = mCur - mPrev;
return *this;
}
int operator*(){ return mCur; }
bool operator!=(const FibItr & _rhs)
{
return mCur != _rhs.mCur || mPrev != _rhs.mPrev;
}
unsigned int mCur, mPrev;
};
struct Fib
{
FibItr begin() { return FibItr(); }
FibItr end() { return FibItr(0, 0); }
};
int main( int argc, char* argv[] )
{
for (auto num : Fib())
{
cout << num << endl;
Sleep(500);
}
return 0;
}