我可以用null初始化迭代器,如果不是,为什么?

问题描述 投票:3回答:2

我正在尝试将迭代器初始化为NULL,但无法正常工作。谁能帮我吗?

如果指针可以用null初始化,为什么我们不能为迭代器做呢?

vector<int> bob;
vector<int>::iterator it=NULL;

我想在类构造函数中初始化迭代器,以便在创建类的对象时,应将迭代器设置为NULL(默认值)。

c++ stl iterator
2个回答
2
投票

否,通常不能使用NULL初始化迭代器。迭代器要求不需要从整数类型或std::nullptr_t(可为NULL可能具有的类型)中分配或初始化迭代器。

尝试这样做没有任何意义。根本不需要它。但是,由于您还没有解释为什么要尝试这样做,因此我无法提出任何进一步的建议。


关于注释中的其他问题:您可以每个转发迭代器 值初始化

vector<int>::iterator it{}; // value-initialized

自C ++ 14起,我们保证以这种方式构造的相同类型的迭代器的比较结果相等。

所有容器迭代器都是正向迭代器。


2
投票

对于迭代器,最好等于NULLnull_ptr的是container::end()值。同样,它也不指向容器的有效元素。因此,代替测试谓词(i == null_ptr),请测试(i == v.end()),并将其初始化为auto i = v.end();

只有拥有容器后才能初始化迭代器。但这在实际中不是问题,因为没有它所引用的容器,迭代器就毫无意义。

如果您有使用迭代器的复杂代码,并且想在函数中隔离该代码,则必须将两个迭代器传递给该函数:当前迭代器或开始迭代器,以及结束迭代器。这就是STL的工作。

© www.soinside.com 2019 - 2024. All rights reserved.