私は最近、意図した使用例しか見たことがなかったので、c++ 11 の範囲ベースの for ループの要件が何であるか疑問に思っていました。
for (auto person : people)
{
cout << person.name << endl;
}
しかし、コンテナにはbeginメソッドとendメソッドだけが必要で、何も含む必要がないことを考えると、以下は何らかの形で「悪い習慣」と見なされますか? 少なくとも、インタビューでフィボナッチ数列について尋ねられたら、それは新鮮な答えです!
#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;
}