2013-10-06 56 views
8

閱讀工作N3337-1草案,標準C++編程語言,24.2.5前向迭代器,頁806根據C++ ISO標準,多通保證是什麼?

從草案:

兩個提領迭代器a和類型的bX提供的多通擔保如果:
- a == b++a == ++b意味着
和 - X是指針類型或表達(void)++X(a), *a被等價於表達式*a。 (注意:a == b意味着++a == ++b(對於輸入和輸出迭代器不是這樣)並且通過可變迭代器(適用於輸出迭代器)去除賦值次數限制的要求)允許使用具有正向迭代器的多通單向算法。 - 完備註]

難道有人會用更簡單的術語重新解釋這個嗎?我知道Forward迭代器是多遍的,但我不明白這是如何按照C++標準要求完成的。

+1

+1因爲我覺得它適合這個社區,即使它沒有解決特定的編程問題,也可能因爲閱讀C++標準可能很難。 – LihO

回答

13

這些術語說明了一切,我想:您可以多次通過序列並記住序列中的位置。只要序列沒有改變,從一個特定的位置(迭代器)開始,您將按照相同的順序遍歷相同的對象。但是,你只能前進,沒有辦法倒退。像這樣的序列的典型例子是單鏈表。

引述的條款基本上說,如果你有兩個迭代器比較平等的,你增加他們中的每一個,你會得到相同的位置,他們再次相等比較:

if (it1 == it2) { 
    ++it1; 
    ++it2; 
    assert(it1 == it2); // has to hold for multi-pass sequences 
} 

的有些怪異的表達++X(a), *a基本上是爲了推進一個獨立於a的迭代器,並且++X(a), *a相當於*a的要求基本上意味着使用獨立迭代器遍歷序列的迭代器不會改變a引用的內容。這與輸入迭代器不同,其中++InIt(a), *a不一定等同於*a,因爲第一個表達式可能會改變位置,可能會使a無效和/或更改它所指的值。

相比之下,單次序列(標準術語中的輸入和輸出迭代)只能遍歷一次:嘗試遍歷序列多次將無法正常工作。像這樣的序列的典型例子是從鍵盤輸入並輸出到控制檯:一旦讀取,你不能再回來相同的字符,一旦發送你不能撤消字符。

相關問題