繁体   English   中英

Stl迭代器的语法如何实现?

[英]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>是一个不是namespaceclass (重要区别),其定义大致如下:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM