1

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

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

但是它不是一个常用的指针,所以简单的 NULL 可能还不够。任何帮助表示赞赏!

4

3 回答 3

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
于 2013-01-25T10:06:43.810 回答
3

该变量init_me是一个对象实例,并且NULL是一个指针。非指针实例不能与指针进行比较。

您应该将其设置init_me为另一个迭代器,这意味着“无迭代器”,例如end,并与之进行比较。

于 2013-01-25T10:07:55.103 回答
2

如果所讨论的多重集始终存在并且在您声明时确定init_me(即迭代器只能指向一个可能的多重集),您可以将mymultiset.end()其用作标记。

(请注意,此迭代器不指向容器的最后一个元素,而是指向“结束”,即它是一个特殊值。这就是使其可用于标记目的的原因。注意仅检查其他迭代器与mymultiset.end()而不是取消引用它。取消引用end()或过去的迭代器是未定义的行为。)

于 2013-01-25T10:08:17.143 回答