2013-03-16 40 views
0

我正在試驗C++標準庫,並希望爲實踐編寫一個通用增量操作符。下面是我的嘗試。有更簡單的方法嗎?我希望它有點像std :: plus。但是我不能使用plus,因爲它是一個二元運算符,generate_n需要一個沒有參數的函數。如何編寫用於算法的C++ stdlib樣式增量函數

這是我的嘗試。任何反饋將不勝感激。

#include <iostream> 
#include <vector> 
#include <algorithm> 


template<typename T> 
class incr { 
public: 
    incr(const T& startnum = 0) : m_start(startnum) {} 

    T operator()() { return m_start++; } 

private: 
    T m_start; 
}; 

void printme(int i) { 
    std::cout << i << " "; 
} 

int main() { 
    int n = 10; 
    std::vector<int> sq(n); 
    incr<int> i(3); 
    std::generate_n(sq.begin(), n, i); 
    std::for_each(sq.begin(), sq.end(), printme); 
    return 0; 
} 

UPDATE: 爲了支持廣泛的我需要排除C++ 11和升壓平臺。

+0

你考慮過[std :: iota](http://en.cppreference.com/w/cpp/algorithm/iota)嗎? – 2013-03-16 21:07:24

+0

@GrigoriyChudnov我需要排除對C++ 11的支持 - 請參閱問題的更新。但有趣的C++ 11包含了這一點。 – 2013-03-17 00:11:46

回答