容器接口返回抽象类型迭代器

时间:2014-01-14 17:24:31

标签: c++ iterator containers abstract

我必须使用模板实现容器(列表和向量),但我遇到了问题。 我有以下容器模板:

template <typename T>
class Container
{
public:
    class iterator
    {
        // ... pure virtual functions
    };
    // ... pure virtual functions
};

template <typename T>
class List : public Container<T>
{
public:
    class iterator : public Container<T>::iterator
    {
        // ... implemented functions
    }
    // ... implemented functions
};

但我不知道如何在begin中指定endContainer,因为我无法做到

virtual iterator begin() = 0;

因为迭代器是一个抽象类。

我如何在Container中指定函数的返回类型,以便它引用List<T>::iterator中的ListVector<T>::iterator中的Vector? 或者也许容器的嵌套迭代器是一个坏主意?

我看到我可以使用智能指针,但我的编译器只支持C ++ 98。

编辑:所以我没有继承权,vectorlist完全独立。 但如果你看到任何方法来实现我上面提到的,请随时回答。

1 个答案:

答案 0 :(得分:2)

  

我如何在Container中指定函数的返回类型,以便它引用List中的List :: iterator和Vector中的Vector :: iterator?

你不能。

  

或者容器的嵌套迭代器可能是个坏主意?

绝对是这样。我不明白为什么你需要一个Container基类或继承。 iterator s的重点是让对它们起作用的算法从容器的类型(到某个级别)抽象出来。您不需要基类来执行此操作,std::vector或任何其他STL容器通常不会以这种方式实现。