c ++将multiset迭代器初始化为NULL

时间:2013-01-25 10:04:54

标签: c++ null iterator initialization

问题是我想将 multiset迭代器初始化为某个值,以便稍后检查是否有成功分配给我的迭代器。现在没有在我的程序的某个循环中初始化我得到一些垃圾和所有崩溃。 在伪代码中,我会这样想:

multiset<whateverclassA,whateverclassB>::const_iterator init_me = NULL;
...//if succesfull, something is assigned to init_me iterator
if (init_me != NULL)
//do something

然而它不是通常的指针,所以简单的NULL可能不够。 任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

使用std::multiset::end。如果无法找到值,这也是std::multiset::find等算法返回的值:

multiset<whateverclassA,whateverclassB>::const_iterator 
    init_me = your_multiset.end();

/* ... */

if (init_me != your_multiset.end())
    //do something

答案 1 :(得分:2)

变量init_me是一个对象实例,NULL是一个指针。非指针实例无法与指针进行比较。

你应该将init_me设置为另一个迭代器,意思是“没有迭代器”,比如end,并与之比较。

答案 2 :(得分:2)

如果有问题的多重集总是存在并且在您声明init_me时确定(即迭代器只能指向一个可能的多重集),则可以使用mymultiset.end()作为标记。

(注意,这个迭代器不是指向容器的最后一个元素,而是指向“end”,即它是一个特殊值。这就是它对标记目的有用的原因。小心只检查其他迭代器mymultiset.end()取消引用它。取消引用end()或者过去的迭代器是未定义的行为。)