我必须使用模板实现容器(列表和向量),但我遇到了问题。 我有以下容器模板:
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
中指定end
和Container
,因为我无法做到
virtual iterator begin() = 0;
因为迭代器是一个抽象类。
我如何在Container
中指定函数的返回类型,以便它引用List<T>::iterator
中的List
和Vector<T>::iterator
中的Vector
?
或者也许容器的嵌套迭代器是一个坏主意?
我看到我可以使用智能指针,但我的编译器只支持C ++ 98。
编辑:所以我没有继承权,vector
和list
完全独立。
但如果你看到任何方法来实现我上面提到的,请随时回答。
答案 0 :(得分:2)
我如何在Container中指定函数的返回类型,以便它引用List中的List :: iterator和Vector中的Vector :: iterator?
你不能。
或者容器的嵌套迭代器可能是个坏主意?
绝对是这样。我不明白为什么你需要一个Container
基类或继承。 iterator
s的重点是让对它们起作用的算法从容器的类型(到某个级别)抽象出来。您不需要基类来执行此操作,std::vector
或任何其他STL容器通常不会以这种方式实现。