C++ 如何构造容器的迭代器

C++ 如何构造容器的迭代器,c++,iterator,stdvector,C++,Iterator,Stdvector,我想编写自己的容器,但在begin()和end()期间,我无意中创建了迭代器 让我们假设它相当于std::vector,但不是专门用于bool。当我键入std::vector::iterator::intellisense时,不会显示任何构造函数。他们如何在begin()和end()调用上构造迭代器?我想,iterator类应该是容器的成员,我错了吗 我相信构造函数是私有的,容器是迭代器的朋友。然而,我认为我搞错了。std::vector::iterator意味着在std::vector类中有一

我想编写自己的容器,但在
begin()
end()
期间,我无意中创建了迭代器

让我们假设它相当于
std::vector
,但不是专门用于
bool
。当我键入
std::vector::iterator::
intellisense时,不会显示任何构造函数。他们如何在
begin()
end()
调用上构造迭代器?我想,
iterator
类应该是容器的成员,我错了吗

我相信构造函数是私有的,容器是迭代器的朋友。然而,我认为我搞错了。

std::vector::iterator
意味着在
std::vector
类中有一个叫做“iterator”的东西。它可能是一个typedef:

template<typename T> class vector {

public:

    typedef {{something}} iterator;
};
它也可能是其他一些Tihng。哪种情况都不重要。唯一可以保证的是,当您引用
std::vector::iterator
时,您会得到满足迭代器要求的内容

对于您的容器,您还可以自由地以任何方式实现容器的迭代器,以产生正确的结果

但是,对于自定义迭代器,您会发现将迭代器方便,因为<代码> STD::迭代器< /C>会自动声明所有迭代器需要的东西,如果它们要与C++库顺利地交互。

最后,就“它们实际上是如何构造的”而言,它们实际上可以以任何方式构造。请注意,您没有显式构造迭代器,而是使用
begin()
end()
,或
find()
,或。。。因此,只有容器关心迭代器需要如何构造。它可以是公共构造函数,也可以是私有构造函数,这完全取决于容器

template<typename T> class vector {

public:

    class iterator {

        // ...
    };
};