首页 > 代码库 > 遇到的一些小问题(1)
遇到的一些小问题(1)
有时代码看起来是正确的, 可实际上就会有一些没想到的疏忽, 考察以下代码:
std::deque<int> ideq{ 5, 13, 2, 25, 7, 17, 20, 8, 4};std::priority_queue<int> priorityQueue (ideq.begin(), ideq.end());for (size_t i = 0; i < priorityQueue.size(); ++i) { std::cout << priorityQueue.top () << " "; priorityQueue.pop ();}
我当时觉得很正常啊, 但是输出的时候就会发现输出的值缺斤少两, 根本不是 9 个值...调试之后发现果然是priorityQueue.size() 的问题, 直到改为:
//...auto queueLength = priorityQueue.size ();for (size_t i = 0; i < queueLength; ++i) { std::cout << priorityQueue.top () << " "; priorityQueue.pop ();}
因为进行了 pop() 操作, 导致 for loop 的过程中, priorityQueue.size () 是动态变化的, 因此只要把 priorityQueue.size () 单独提出来就可以了, 而且就是考虑到效率, 把 priorityQueue.size () 提出来也可以降低函数重复调用的开销.
遇到的一些小问题(1)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。