規範的事情是隻從std::iterator<std::forward_iterator_tag, T>
繼承。迭代器只有一個類別。
該標準對於也是前向迭代器的輸出迭代器沒有算法(或其他用途)。標準中輸出迭代器的所有用途只需要單遍。
相反,該標準的想法是可變的與不可變的迭代器的類別forward/bidi/randomaccess。所有需要通過迭代器寫入的算法,需要比單遍更好的算法,也可以通過它們寫入的相同迭代器讀取。這是std::remove
,std::sort
和其他變異算法。
可變和不可變迭代器之間的差異不會被迭代器標記檢測到,而是由賦值表達式是否格式良好決定的。因此,舉例來說,如果您將迭代器傳遞給std::sort
,這是不可變的,那麼該算法無論如何都不會編譯,所以通常不需要使用output_iterator_tag
來標記輸入迭代器。所有需要OutputIterator
的算法都可以使用可變的ForwardIterator
,同樣也不需要使用output_iterator_tag
來標記它。
如果你有不同於標準算法的需求,那麼我不能立即想到你的提議對你的迭代器不起作用的原因。但它不會檢測可變標準迭代器。例如std::deque<int>::iterator
和int*
的迭代器類別爲random_access_iterator_tag
,而不是您的私有標記,並且與output_iterator_tag
沒有任何關係。所以你可能會更好地定義你自己的特質類,而不是希望適應現有的iterator_traits::iterator_category
來提供你想要的信息。
繼承他們兩個都會做 –
作爲一個側面的問題:有誰知道這些可變的迭代器標籤是否被認爲是標準庫?如果是這樣,爲什麼他們不包括在內? –