gpt4 book ai didi

c++ - 如何构造容器的迭代器

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:31 24 4
gpt4 key购买 nike

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

让我们假设它等同于 std::vector , 但不专门用于 bool .当我输入 std::vector<int>::iterator::智能感知不显示任何构造函数。他们如何在 begin() 上构造迭代器和 end()电话?我猜 iterator类应该是容器的成员,我错了吗?

我相信构造函数是私有(private)的,容器是迭代器的 friend 。不过,我想我弄错了。

最佳答案

std::vector<T>::iterator意味着 std::vector<T> 里有东西称为“迭代器”的类。它可能是一个 typedef:

template<typename T> class vector {

public:

typedef {{something}} iterator;
};

(注意:出于这个问题的目的,我忽略了 Allocator 模板参数,它不相关)。

或者,它可以是一个完整的内部类。

template<typename T> class vector {

public:

class iterator {

// ...
};
};

也可能是其他一些tihngs。不管是哪种情况都没有关系。唯一可以保证的是,当您引用 std::vector<T>::iterator 时,你得到满足迭代器要求的东西。

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

但是,对于您的自定义迭代器,您会发现将迭代器设置为 properly inherit from std::iterator 会很方便,因为 std::iterator将自动声明一些所有迭代器都需要的东西,如果它们要与 C++ 库顺利地互操作的话。

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

关于c++ - 如何构造容器的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com