請注意這段代碼不是由我寫的。否則我不會問這個問題。全額抵免Jerry Coffin。無論如何,代碼通過重載std :: iterator <>來生成一系列數字。重載迭代器:C++語義問題
我會先發布代碼,然後我會給我解釋我所看到的。如果一個專家的C++成員可以糾正我,如果我錯了,我將不勝感激。
代碼
static const int N = 10;
template <class T>
class sequence : public std::iterator<std::forward_iterator_tag, T>
{
private:
T val;
public:
sequence(T init) : val(init) { }
T operator *() { return val; }
sequence &operator++() { ++val; return *this; }
bool operator != (const sequence &other) { return val != other.val; }
};
void foo()
{
typedef std::vector<int> graph;
graph id1(gen_seq(0), gen_seq(N));
display(id1); /* Not declared */
}
/* displays: 0 1 2 3 4 5 6 7 8 9 */
所以在看這個的時候我看到你創建一個包含價值的一類。現在我們將其中兩個傳遞給vector的構造函數,它可以使用兩個迭代器。現在,每次向量的構造函數在「序列」上使用++運算符時,它都會遞增迭代器中的值。從技術上講,你可以這樣寫:
graph id1(gen_seq(0), gen_seq(0));
這樣會產生相同的序列是否正確?或者它是檢查以確保0還沒有到達N的!=運算符。對此的任何輸入都會有很大的幫助。我剛剛讀完Stroustrup的C++編程語言第3版,在那裏他談到了迭代器,但是從它們繼承來的並不是一個大話題,而我還沒有完全理解。我會完成他所有的練習,因爲我記得他要求重複迭代器幾次。
這不是重載,它只是繼承。 –
對不起,用錯了名詞。我將編輯我的帖子 –
爲了完整起見,還要注意前向迭代器也必須提供以下操作:默認構造,後綴'++'和等號('==')。所有這三項都可以根據您已經定義的運營商輕鬆定義。 –