c++ 我能用null初始化迭代器吗?如果不能,为什么?

kzipqqlq  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(177)

我正在尝试将一个迭代器初始化为NULL,但是它不工作。有人能帮助我吗?
如果指针可以用null初始化,为什么迭代器不能这样做呢?

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

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

lokaqttq

lokaqttq1#

不可以,一般来说你不能用NULL初始化迭代器。迭代器的要求不要求迭代器可以从整数类型或std::nullptr_t赋值或初始化,NULL可能有这样的类型。
这样做是没有意义的,根本没有需要,但既然你没有解释为何要这样做,我实在不能再提出任何建议。
关于您在评论中提出的其他问题:您可以 * 值初始化 * 每个 * 前向迭代器 *:

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

从C++14开始,你可以保证用这种方法构造的相同类型的迭代器比较结果相等。
所有容器迭代器都是向前迭代器。

hwamh0ep

hwamh0ep2#

NULLnull_ptr的最佳等价物是container::end()的值,同样它也不指向容器的有效元素,因此,测试(i == v.end()),而不是测试 predicate (i == null_ptr),并初始化为auto i = v.end();
只有当你有了一个容器之后,你才能初始化迭代器,但这在实践中并不成问题,因为如果没有它所引用的容器,迭代器就毫无意义。
如果你有复杂的使用迭代器的代码,并且你想在一个函数中隔离这些代码,你将不得不传递两个迭代器给这个函数:当前或开始迭代器和结束迭代器。这就是STL所做的。

idfiyjo8

idfiyjo83#

迭代器在创建时初始化。您可以检查其_Ptr成员是否为空:
向量::迭代器p;如果(p._Ptr ==空)...
(使用叮当声和叮当声)

相关问题