我不時感到需要某種迭代器(除了這個問題標題前面的那個名稱之外,我無法給出一個好名字)。序列迭代器?是不是有一個在提升?
假設我們有一個映射整數類型T.這是一個函數(或函數對象),我們有一個數學序列的定義,但我們實際上沒有它存儲在內存中。我想製作一個迭代器。迭代器類將是這個樣子:
template <class F, class T>
class sequence_iterator : public std::iterator<...>
{
int i;
F f;
public:
sequence_iterator (F f, int i = 0):f(f), i(i){}
//operators ==, ++, +, -, etc. will compare, increment, etc. the value of i.
T operator*() const
{
return f(i);
}
};
template <class T, class F>
sequence_iterator<F, T> make_sequence_iterator(F f, int i)
{
return sequence_iterator<F, T>(f, i);
}
也許我太天真,但我個人覺得這個迭代器會非常有用。例如,假設我有一個函數來檢查數字是否爲素數。我想要計算區間[a,b]中的素數數目。我會這樣做;
int identity(int i)
{
return i;
}
count_if(make_sequence_iterator<int>(identity, a), make_sequence_iterator<int>(identity, b), isPrime);
因爲我發現一些東西,這將是有益的(至少恕我直言)我絕對是積極的,它存在於升壓或標準庫。我無法找到它。所以,有沒有像這樣的提升?。在不太可能發生的情況下,我將寫下一個 - 在這種情況下,我想知道您是否應該製作iterator_category
random_access_iterator_tag
。我擔心的是,這不是真正的RAI,因爲operator*
沒有返回參考。
在此先感謝您的幫助。
CUDA Thrust恰好具有這種功能,可以避免產生「微不足道的」顯式序列。 –
這讓我想起了馬修威爾遜的[Fibonacci_sequence](http://www.informit.com/content/images/9780321305503/samplechapter/0321305507_CH23.pdf)。它更像你在說什麼的具體情況,但它可能ATLEAST給你一些想法或靈感:-) – mrm
MRM:準確地說,我想那:) –