码迷,mamicode.com
首页 > 其他好文 > 详细

遇到的一些小问题(1)

时间:2014-12-08 12:22:22      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   问题   log   

有时代码看起来是正确的, 可实际上就会有一些没想到的疏忽, 考察以下代码:

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)

标签:style   blog   io   color   sp   for   div   问题   log   

原文地址:http://www.cnblogs.com/wuOverflow/p/4150646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!