【发布时间】:2010-07-26 20:33:27
【问题描述】:
这是我之前提出的问题 (Complexity of STL max_element) 的后续跟进。
我想基本上从集合中弹出最大元素,但我遇到了问题。
这大概是我的代码:
set<Object> objectSet;
Object pop_max_element() {
Object obj = *objectSet.rbegin();
set<Object>::iterator i = objectSet.end()--; //this seems terrible
objectSet.erase(i); //*** glibc detected *** free(): invalid pointer
return obj;
}
之前我尝试过objectSet.erase(objectSet.rbegin());,但编译器抱怨没有匹配的函数(我猜它不喜欢reverse_iterator)。我知道没有检查空集,但是当 objectSet.size() >> 0 时它失败了。
【问题讨论】:
-
*objectSet.rbegin();是错字吗?您要取消对集合的引用吗? -
不,它是被取消引用的迭代器。圆点比星星更紧密。