[英]Inherit all functions from user-defined iterator in reverse_iterator
[英]Does reverse_iterator inherit from iterator?
使其為std::list::iterator
和std::list::reverse_iterator
。 反向是從正向派生的嗎? 如果不是,那么為什么list
成員函數沒有反向等效項?
提前致謝。
使其為std :: list :: iterator和std :: list :: reverse_iterator。 反向是從正向派生的嗎?
不一定(它們可能在大多數實現中)是不同類型。 迭代器一直都在復制,這種繼承會導致切片。 另外, iterator
上的所有操作都應該是virtual
以避免不一致,這會導致效率低下。 考慮一下,標准甚至禁止繼承作為一種可能的實現是有意義的(也許間接地做到了)。
更新:該標准為std::reverse_iterator
類模板提供了定義,並強制要求std::list::reverse_iterator
是此類模板的專門化版本。 繼承是不可能的實現。
如果不是這樣,為什么列表成員函數沒有反向等效項?
因為您可以在reverse_iterator
上調用base()
來獲取基礎的常規iterator
。 reverse_iterator
及其對應的iterator
i
之間的基本關系是&*(reverse_iterator(i)) == &*(i - 1).
在GNU C ++標准庫的實現中,reverse_iterator和迭代器之間存在has-a關系。 (我從未看過MSVC ++或llvm的實現,但我可以想象它們是相同的。)
基本上,reverse_iterator接受一個迭代器,並具有一個薄包裝器,以便++別名-和-別名++。 基本上,所有操作都是底層非反向迭代器的包裝。
如果不是這樣,為什么列表成員函數沒有反向等效項?
std::list
確實具有反向迭代器 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.