微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用队列的幻像错误STL库,Windows / MingW / G ++

如何解决使用队列的幻像错误STL库,Windows / MingW / G ++

|| 使用STL库中的Queue时,我遇到了两个意外问题: 1)我正在尝试清除队列(队列没有清除功能), 但直观的方法是给我一个核心转储:
//The queue is defined Globally but the problem happens even
//if i define it locally and pass it by reference.
queue<pair<int,int> > Q;

void yadayada ()
{
    //initialize Q
    while (!Q.empty())
        Q.pop();   //CORE DUMP,what the hell?
}
2)当我从队列前面打印元素(一对)时 错误地打印为(0,0)。但是当我使用元素(返回 对的第二个元素)是对的!
int yadayada2(...) 
{
//code...code...code

//the element in front is (4,20)
front = Q.front(); Q.pop();

cout << \"(\" << front.first << \",\" << front.second << \")\" << endl;
//prints: (0,0) 
//what the hell?

//correctly returns 20
return front.second;
}

int main()
{
//code...code...code 

//prints 20!
cout << yadayada2 << endl;
}
我虽然说:\“也许流行元素使元素无效(没有意义,但是...) 所以我移动了Q.pop();到返回之前。但是同样的事情仍然发生...     

解决方法

清除队列的最佳方法是:
Q = queue< pair< int,int > >(); // assign value of an empty temporary
至于“ 3”错误,我必须同意奥利(Oli)并怀疑引用无效。     ,在WTF上: 或者您的代码在现实生活中犯了更多的错误(用其他方法替换int,例如涉及auto_ptr,没有适当的复制/赋值语义的类等)? 或者:您的mingw设置很糟糕。 我只是在Linux和i586-mingw32msvc-g ++上使用g ++编译了两个代码片段,并在wine和valgrind下运行了它……没有问题:)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。