簡體   English   中英

通用迭代器

[英]Generic iterator

我試圖找到一種訪問一組容器的通用方法。 除了另一個自定義列表外,我還有一個標准的矢量和列表。

自定義列表定義了一個迭代器;

class Iterator: public std::iterator<std::forward_iterator_tag, T> {
    // ...
}

Iterator begin() {
    return (Iterator(root));
}

Iterator end() {
    return (Iterator(NULL));
}

與適當的運算符重載。

理想情況下,我想這樣做;

class Foo {
public:
    Foo() {
        std::list<int> x;
        std::vector<int> y;
        custom_list<int> z;

        iter = x.begin(); // OR
        iter = y.begin(); // OR
        iter = z.begin();

        // ...
    };
private:
    std::iterator<int> iter;
};

但顯然這些都是不同類型的迭代器。 我可以假設所有容器都是相同類型的。

有沒有一種優雅的方法來解決這個問題?

遲到總比不到好...

最新一期的C-Vu出現並猜測其中的內容:這是正確的,迭代器完全符合您的要求。

不幸的是,您需要成為ACCU的成員才能查看該雜志(該文章引用了David鏈接到2000年的Overload文章)。 但是,對於每年一個不起眼的價格,你會得到一本很好的雜志閱讀,會議和用戶群。 當您成為會員時,您可以查看PDF背面問題,那么還等什么呢?

一個小心你要求的案例。 您看到的any_iterator類可以處理一組無限的迭代器類型。 你只有三個,你事先知道。 當然,您可能需要在將來添加第四種類型,但是如果需要額外的O(1)代碼行呢?

封閉的一組可能包含的類型的一大優點是你有一個sizeof()的上限,這意味着你可以避免堆和它帶來的間接。 基本上,將它們全部填入boost :: variant並調用apply_visitor。

暫無
暫無

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

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