2017-07-30 86 views
0

我知道如何实现模板类。
但是,我不明白如何内部实现以下list<int>::iterator。我应该创建一个名称空间吗?
(基本上,我想使用定制化实施同样的STL语法)。如何实现列表<T> :: iterator?

list<int> l; 
list<int>::iterator it = l.begin(); 

总之,是什么让代码没有任何STL库工作的最简单的方法?

这是自定义列表实现的一个片段: (我省略了大部分的方法,以提高可读性。)

template <typename T> 
struct list { 
     struct listNode { 
     listNode() : item(0), next(0) {} 
       listNode(T x) : item(x), next(0) {} 
       T item; 
       listNode* next; 
     }; 
     list() : head(0),tail(0) {}  
     listNode* head; 
     listNode* tail; 
}; 
+0

为什么不看看你的STL实现,看看如何实现'list :: iterator'? – PaulMcKenzie

+0

StackOverflow不是让其他人编写代码的网站。您需要尝试编写它,如果您遇到问题,请发布您拥有的代码并清楚说明您遇到的具体问题。 – xaxxon

+0

我想我没有清楚说明我的问题。我只是不明白符号本身的机制。我不希望人们实现我的代码。迭代器怎么可能有一个未知的容器? –

回答

2

您可以实现容器类型内部的迭代器类型,使其具有任何信息它正在迭代的容器。

template<class T> 
class SomeContainer { 

public: 

    class Iterator { 
     // You can use SomeContainer and T in here. 
    }; 
}; 
+2

请注意,至少有一些现代的STL实现不这样做:谷歌SCARY迭代器,如果你在意。但是,这种技术是可以实现的,并且您应该如何开始这样做以学习。 – Yakk

+0

这是我正在寻找的答案。我不知道使用::运算符可以访问嵌套类。谢谢。 –

+0

@PeterHwang增加了“public:” – xaxxon

相关问题