我正在尝试将迭代器初始化为NULL
,但无法正常工作。谁能帮我吗?
如果指针可以用null初始化,为什么我们不能为迭代器做呢?
vector<int> bob;
vector<int>::iterator it=NULL;
我想在类构造函数中初始化迭代器,以便在创建类的对象时,应将迭代器设置为NULL
(默认值)。
否,通常不能使用NULL
初始化迭代器。迭代器要求不需要从整数类型或std::nullptr_t
(可为NULL
可能具有的类型)中分配或初始化迭代器。
尝试这样做没有任何意义。根本不需要它。但是,由于您还没有解释为什么要尝试这样做,因此我无法提出任何进一步的建议。
关于注释中的其他问题:您可以每个转发迭代器 值初始化:
vector<int>::iterator it{}; // value-initialized
自C ++ 14起,我们保证以这种方式构造的相同类型的迭代器的比较结果相等。
所有容器迭代器都是正向迭代器。
对于迭代器,最好等于NULL
或null_ptr
的是container::end()
值。同样,它也不指向容器的有效元素。因此,代替测试谓词(i == null_ptr)
,请测试(i == v.end())
,并将其初始化为auto i = v.end();
。
只有拥有容器后才能初始化迭代器。但这在实际中不是问题,因为没有它所引用的容器,迭代器就毫无意义。
如果您有使用迭代器的复杂代码,并且想在函数中隔离该代码,则必须将两个迭代器传递给该函数:当前迭代器或开始迭代器,以及结束迭代器。这就是STL的工作。