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;
...
};