我最近想知道的要求是基於對C++ 11圈的範圍,因爲我只看過打算使用的例子:這是一個合理的方式來利用基於範圍的循環?
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;
}
我不完全找到*無限循環*合理的東西......但這只是我。 –
@David爲什麼不呢?因爲發電機是完全合理的,所以總是有「中斷」和無限序列。 –
我會努力讓'FibItr'成爲一個合適的ForwardIterator。一種方法是繼承'std :: iterator'並實現更多方法,如'operator ==','operator->','operator ++(int)'。另一種方法:使用'boost :: iterator_facade'。 – aschepler