gpt4 book ai didi

c++ - std::multiset::iterator = NULL 不再有效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:41 27 4
gpt4 key购买 nike

我有一些代码正在使用 gcc 4.7(从 3.1)更新到 C++11

我有一个 multiset 定义为一个类的私有(private)成员:

multiset <Object*, objectcomp> objects_;

代码中有一段看起来像这样(p_q 是一对多集迭代器,对那句讨厌的行感到抱歉,迫不及待地想用 auto 替换它,哈哈):

void Terrain::removeObject(Object* obj){
pair<multiset<Object*, objectcomp>::iterator, multiset<Object*, objectcomp>::iterator> p_q;
multiset<Object*, objectcomp>::iterator p,q;
q = NULL;
p_q = objects_.equal_range(obj);
for(p = p_q.first; p != p_q.second; p++){
if(*p == obj) {q=p; break;}
}
if(q!=NULL){
... do stuff based on q no longer being null
}
}

这将不再编译。您不能再将迭代器设置为 null 了吗?有什么选择? (nullptr 也不起作用)

最佳答案

将迭代器设置为 NULL 是不合法的。您可能很幸运,因为您的特定实现恰好使用指针作为该类型的迭代器,但这仍然是非法的。

正确答案是:

q = objects_.end();

或者,在某些情况下:

q = multiset<Object*, objectcomp>::iterator();

关于c++ - std::multiset::iterator = NULL 不再有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com