簡體   English   中英

reverse_iterator是否從迭代器繼承?

[英]Does reverse_iterator inherit from iterator?

使其為std::list::iteratorstd::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.

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