2016-02-06 71 views
2

我讀C++ Standard(節輸入迭代),我有硬時間以顯現在粗體文本:C++輸入迭代

注:對於輸入的迭代器,一個== B不意味着+ + a == ++ b。 (相等不保證替換 屬性或引用透明度。)輸入迭代器的算法不應該嘗試通過 兩次通過相同的迭代器。它們應該是單通道算法。

我明白輸入迭代器是單遍,但我似乎無法用C++代碼將其可視化。有人能告訴我如何使迭代器成爲一個單一的例子嗎?

+0

你是什麼意思的「如何使迭代器成爲一次通過」?他們爲什麼一次通過?或者如何使用這種迭代器? –

+0

我不確定你在問什麼。迭代器就是它們;他們不會「變成」任何東西。你是否要求一個不是multipass的迭代器的例子?如果是這樣,請考慮從stdin中讀取的文件。 –

+0

@Revolver_Ocelot對不清楚,我想從頭開始創建輸入迭代器(不使用STL或boost)來學習。我只是不知道如何讓我的輸入迭代器類成爲單通(強制單通)?在我的理解中,它是底層容器或流('stdin')的一個工作,它將迭代器作爲輸入或前向迭代器,對嗎? – Orion

回答

2

假設您想從標準輸入中讀取整數。這樣做的一個方法就是使用

#include <iterator> 
#include <iostream> 
#include <vector> 

using namespace std; 

const vector<int> v{istream_iterator<int>{cin}, istream_iterator<int>{}}; 

這將讀取到的整數v(見istream_iterator)。

在這種情況下,迭代器將會是單次傳遞很有意義,因爲範圍是剛剛創建的事情,因爲用戶鍵入事物,並且每個元素都被消耗並消失。你不能重申這個範圍。


除此之外,沒有那麼一定要通過

的意思如何使迭代器成爲一個單一的通?

  • 如果你的意思是「如何以表示你正在寫一個迭代器類有這個限制?」,然後將其iterator_categoryinput_iterator_tag

    struct my_iterator 
    { 
        using iterator_category = input_iterator_tag; 
    }; 
    
  • 如果您想查詢(在編譯時)迭代器類是否有此限制,請使用iterator_traits

+0

轉發迭代器是多通道的,你是否指'input_iterator_tag'? –

+0

@ M.M我需要多次感謝您提供有用的評論。非常感謝! –

+0

@AmiTavory對不起,我想從頭開始創建輸入迭代器(不使用STL或增強)進行學習。我只是不知道如何讓我的輸入迭代器類成爲單通(強制單通)?在我的理解中,它是底層容器或流('stdin')的一個工作,它將迭代器作爲輸入或前向迭代器,對嗎? – Orion