[英]How is the syntax for stl iterators implemented?
我一直在业余时间编写库,以使自己更加熟悉c ++和奇异值分解。 我一直在编写Iterator类,并且完全有能力编写该功能,并且我已经拥有了自己的当前MatrixIterator类。 我猜它涉及名称空间,因为:
vector<int>::iterator
似乎是名称空间向量的迭代器,但是名称空间是我不熟悉的另一个主题。
我主要是在问实现一个迭代器会涉及到什么,以便可以与stl迭代器类似的方式对其进行引用。 我也知道我可以使用boost.iterators或类似的东西来节省很多工作,但是我对学习像这样的所有细节更感兴趣。
不,这与名称空间无关。 它只是类中的typedef:
template <typename T>
class container
{
public:
typedef ... iterator;
};
一旦有了迭代器类,就需要实现几个运算符。 对于前向迭代器,应为:
operator*();
operator++();
operator==(const TYPE &other);
如果您希望迭代器可以完全参与STL的其余部分,则还需要执行其他操作,例如为其指定类别。
通常,它是容器中的嵌套类或通过::
访问的typedef。
Web上有大量带有迭代器的类示例(我不建议您研究STL实现,因为很难理解是否是第一次使用它。)
您可以查看STX Btree实现,以查看设计良好的迭代器示例。
vector<int>
是一个不是namespace
的class
(重要区别),其定义大致如下:
template<typename T>
class vector{
public:
typedef some_type iterator;
...
};
其中some_type
也很可能是vector的friend
,甚至是成员类
::
运算符不仅访问名称空间; 它还访问类的typedef,静态成员,枚举等。
#include <iostream>
template <typename T>
class Foo
{
public:
static void write(T t)
{
std::cout << t << std::endl;
}
typedef T thing;
};
int main()
{
Foo<int>::thing my_thing = 42;
Foo<int>::write(my_thing);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.