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

Popular posts from this blog

android - Why am I getting the message 'Youractivity.java is not an activity subclass or alias' -

Making Empty C++ Project: General exception (Exception from HRESULT:0x80131500) Visual Studio Community 2015 -

How to fix java warning for "The value of the local variable is not used " -