我讀C++ Standard(節輸入迭代),我有硬時間以顯現在粗體文本:C++輸入迭代
注:對於輸入的迭代器,一個== B不意味着+ + a == ++ b。 (相等不保證替換 屬性或引用透明度。)輸入迭代器的算法不應該嘗試通過 兩次通過相同的迭代器。它們應該是單通道算法。
我明白輸入迭代器是單遍,但我似乎無法用C++代碼將其可視化。有人能告訴我如何使迭代器成爲一個單一的例子嗎?
我讀C++ Standard(節輸入迭代),我有硬時間以顯現在粗體文本:C++輸入迭代
注:對於輸入的迭代器,一個== B不意味着+ + a == ++ b。 (相等不保證替換 屬性或引用透明度。)輸入迭代器的算法不應該嘗試通過 兩次通過相同的迭代器。它們應該是單通道算法。
我明白輸入迭代器是單遍,但我似乎無法用C++代碼將其可視化。有人能告訴我如何使迭代器成爲一個單一的例子嗎?
假設您想從標準輸入中讀取整數。這樣做的一個方法就是使用
#include <iterator>
#include <iostream>
#include <vector>
using namespace std;
const vector<int> v{istream_iterator<int>{cin}, istream_iterator<int>{}};
這將讀取到的整數v
(見istream_iterator
)。
在這種情況下,迭代器將會是單次傳遞很有意義,因爲範圍是剛剛創建的事情,因爲用戶鍵入事物,並且每個元素都被消耗並消失。你不能重申這個範圍。
除此之外,沒有那麼一定要通過
的意思如何使迭代器成爲一個單一的通?
如果你的意思是「如何以表示你正在寫一個迭代器類有這個限制?」,然後將其iterator_category
到input_iterator_tag
struct my_iterator
{
using iterator_category = input_iterator_tag;
};
如果您想查詢(在編譯時)迭代器類是否有此限制,請使用iterator_traits
。
轉發迭代器是多通道的,你是否指'input_iterator_tag'? –
@ M.M我需要多次感謝您提供有用的評論。非常感謝! –
@AmiTavory對不起,我想從頭開始創建輸入迭代器(不使用STL或增強)進行學習。我只是不知道如何讓我的輸入迭代器類成爲單通(強制單通)?在我的理解中,它是底層容器或流('stdin')的一個工作,它將迭代器作爲輸入或前向迭代器,對嗎? – Orion
你是什麼意思的「如何使迭代器成爲一次通過」?他們爲什麼一次通過?或者如何使用這種迭代器? –
我不確定你在問什麼。迭代器就是它們;他們不會「變成」任何東西。你是否要求一個不是multipass的迭代器的例子?如果是這樣,請考慮從stdin中讀取的文件。 –
@Revolver_Ocelot對不清楚,我想從頭開始創建輸入迭代器(不使用STL或boost)來學習。我只是不知道如何讓我的輸入迭代器類成爲單通(強制單通)?在我的理解中,它是底層容器或流('stdin')的一個工作,它將迭代器作爲輸入或前向迭代器,對嗎? – Orion