簡體   English   中英

Iterator增量是否會產生新的迭代器?

[英]Is Iterator increment results a new iterator?

當我們向(或從)指針添加(或減去)整數值時,結果是一個新指針。 新指針指向原始指針前面(或后面)給定數字的元素:( pp.119 c ++ primer 5ed

我也從書中學到了,指針是迭代器( pp.118 c ++ primer 5ed )。

我是否還可以聲稱迭代器上的算術運算創建了一個全新的迭代器。

這本書描述了你寫的情況,比如p + n ,其中p是指針, n是整數。 該表達式生成指針類型的新值。 由您決定存儲值的位置; 你也可以決定不存儲它。

遞增指針,即寫入p += n ,將原始指針的值更改為p + n

它對迭代器的工作方式是相同的: it + n產生一個新的迭代器,而it += n改變現有的迭代器。

注意第一個表達式可以寫成std::next(it, n) ,而第二個表達式應該寫成std::advance(it, n) ,用於迭代器和指針。

我是否還可以聲稱迭代器上的算術運算創建了一個全新的迭代器。

標准庫中的迭代器被設計為在某種程度上模仿其行為中的指針。 因此,如果您正在討論源自標准庫容器的迭代器,那么對它們進行后遞增(也將修改源代碼)或向它們添加數字(對於隨機訪問迭代器)將導致新的純迭代器值(或“新的迭代器“正如你所說的那樣”。 並且添加不會修改標准庫中的源迭代器。

但是,由於迭代器通常可以是任何用戶定義的類,並且具有自己的重載操作符集,因此沒有任何說明。 理論上可以設計一個迭代器,其結果是對作為操作數提供的現有迭代器的引用。

事實上,即使在標准庫中,pre-increment也會返回對當前迭代器的引用(根據C ++中指針的行為)。

是的,不,也許。 迭代器就是所謂的“代理對象”,它是一個包含與某個其他對象相關聯的元數據的對象。 在這種情況下,迭代器嘗試表現得像指針,至少是一種。

因此,您的實際迭代器對象將完全相同(例如,如果在迭代器的構造函數中設置斷點,則不會在迭代器上從operator++調用它)。 給出答案“不”。

迭代器內部將有一個不同的值,並且表現得像一個不同的(在引用文本中也稱為“new”)指針。 所以它給出了答案“是”。

我相信我們可以進一步討論這個問題,得出結論,最終答案取決於你所說的“新迭代器”的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM