c++ - May I clear a priority_queue by clearing its underlying container? -
the following code inherits std::priority_queue , provides clear()
calls internal std::vector
's clear()
#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(); } }
when tested g++, msvc++ , clang, produces expected output:
-1 -2 -3 -4 -5
but haven't seen guarantee this, i.e. clearing internal vector same calling pop()
when priority_queue isn't empty. although know other ways clear such swap or assign using empty priority_queue, think if code can work well, more efficient since allocated memory in vector reusable. wonder if code portable or won't work?
a question. while can't seem find strict guarantee correct method, there reasons think is.
for example, consider docs operator=
:
copy assignment operator. replaces contents copy of contents of other. calls
c = other.c;
. (implicitly declared)
since other queue may of different size, means there no internal state dependent on size. moreover, implies assigning empty queue replaces container empty 1 , nothing else.
with in mind, , fact reasonable implementation of priority queue hardly need maintain state except size of queue, believe can safely assumed clearing underlying container valid way empty queue.
Comments
Post a Comment