次のコードは:: PRIORITY_QUEUEはstdと内部std::vector
のclear()
priority_queueを、その基になるコンテナを消去してクリアできますか?
#include<iostream>
#include<queue>
using namespace std;
template<class type>
struct mypq :public priority_queue<type> {
void clear(){
this->c.clear();
}
};
mypq<int>pq;
int main() {
for(int i=0;i<10;++i)
pq.push(i);
pq.clear();
for(int j=-5;j<0;++j)
pq.push(j);
while (!pq.empty()){
cerr<<pq.top()<<endl;
pq.pop();
}
}
を呼び出しclear()
Iは、G ++、MSVC++と打ち鳴らすでそれを試験した場合、それは予想される出力を生成し提供する継承します
-1
-2
-3
-4
-5
を
しかし、これは保証されていません。つまり、内部ベクトルをクリアすることは、priority_queueが空でない場合はpop()
を呼び出すのと同じです。私はスワップや空のpriority_queueを使ってそれを割り当てるなどの他の方法を知っていますが、このコードがうまくいくとすれば、ベクトルの割り当てられたメモリが再利用可能であるので効率的です。だから私はこのコードが移植性があるのか、いつもうまくいかないのだろうかと思います。
[この質問](http://stackoverflow.com/questions/2852140/priority-queue-clear-method)を参照してください。 –