stl迭代器的语法是如何实现的? 我在业余时间一直在写一个图书馆,以使自己更熟悉C++和奇异值分解。我一直在写一个迭代器类,我完全有能力写这个函数,我已经为我自己的MatrixIterator类写过了。我猜它涉及名称空间,因为: vector<int>::iterator 向量::迭代器

stl迭代器的语法是如何实现的? 我在业余时间一直在写一个图书馆,以使自己更熟悉C++和奇异值分解。我一直在写一个迭代器类,我完全有能力写这个函数,我已经为我自己的MatrixIterator类写过了。我猜它涉及名称空间,因为: vector<int>::iterator 向量::迭代器,c++,stl,iterator,C++,Stl,Iterator,似乎是名称空间向量中的迭代器,但名称空间是我不熟悉的另一个主题 我主要想问的是,实现迭代器需要做些什么,这样它才能以类似于stl迭代器的方式被引用。我也知道我可以使用boost.iterators或类似的工具来节省大量的工作,但我更感兴趣的是学习这类工具的所有细节。通常它是容器中的嵌套类,或者是通过:访问的typedef web上有大量带有迭代器的类示例(我不建议调查STL实现,因为如果您第一次查看它,很难理解) 您可以查看实现以查看设计良好的迭代器示例。不,这与名称空间无关。它只是类中的一个t

似乎是名称空间向量中的迭代器,但名称空间是我不熟悉的另一个主题


我主要想问的是,实现迭代器需要做些什么,这样它才能以类似于stl迭代器的方式被引用。我也知道我可以使用boost.iterators或类似的工具来节省大量的工作,但我更感兴趣的是学习这类工具的所有细节。

通常它是容器中的嵌套类,或者是通过
访问的typedef

web上有大量带有迭代器的类示例(我不建议调查STL实现,因为如果您第一次查看它,很难理解)


您可以查看实现以查看设计良好的迭代器示例。

不,这与名称空间无关。它只是类中的一个typedef:

template <typename T>
class container
{
public:
    typedef ... iterator;
};

如果您想要一个迭代器能够完全参与STL的其余部分,那么您还需要做一些其他事情,比如给它一个类别。

操作符不仅仅访问名称空间;它还访问类的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);
}
#包括
模板
福班
{
公众:
静态无效写入(T)
{
std::cout
向量
是一个
而不是
名称空间
(重要区别),定义如下:

template<typename T>
class vector{
    public:
        typedef some_type iterator;
    ...
};
模板
类向量{
公众:
typedef某种类型的迭代器;
...
};
其中
某些类型也很可能是向量的
朋友
,甚至是成员类

template<typename T>
class vector{
    public:
        typedef some_type iterator;
    ...
};