phr*_*iac 3 c++ stl segmentation-fault multiset
我不知道是什么让这段代码出错.这是一个简单的multiset.没有编译错误,但在执行时机器上出现分段错误.
g ++版本:4.8.2
机器:Ubuntu 14.04
#include <cstdio>
#include <set>
using namespace std;
struct compare
{
bool operator() (int lhs, int rhs) { return lhs < rhs; }
};
typedef multiset < int, compare > mi;
mi sett;
int main(void)
{
sett.insert(5);
sett.insert(5);
sett.erase(*sett.begin());
sett.erase(*sett.rbegin());
printf("Done\n");
}
Run Code Online (Sandbox Code Playgroud)
你的第一个erase有效地清空你的multiset.
来自std::multiset::erase(强调我的)
从容器中删除指定的元素.
1)删除pos处的元素.
2)删除范围内的元素[first; 最后),它必须是*this中的有效范围.
3)使用键值键删除所有元素.
擦除元素的引用和迭代器无效.其他引用和迭代器不受影响.
迭代器pos必须是有效且可解除引用的.因此,end()迭代器(有效但不可解除引用)不能用作pos的值.
因此,第二次你试图erase你试图取消引用std::multiset::end,这是sett.rbegin()空的返回multiset