words를 출력하면 내용이 제거되기 때문에 먼저 words의 복제본을 만든다. top()이 반환한 원소를 출력한 다음에는 pop()을 호출해서 출력한 원소를 제거하고 다음 원소에 접근할 수 있게 한다. 루프 조건절에서는 empty()를 호출해서 모든 원소가 제거되었을 때 루프를 종료한다. words_copy.size()를 사용해 루프 종료 시점을 제어할 수도 있다. words_copy.size()에서 반환하는 값은 암묵적으로 bool로 변환된다. 따라서 size()가 0을 반환하면 결과는 false가 된다.
words를 위한 입력이 다음과 같다면
one two three four five six seven ^Z
출력은 다음과 같을 것이다.
two three six seven one four five
priority_queue의 내용을 한 번 이상 출력해야 한다면 이를 함수로 만들어 두는 쪽이 더 좋다. 다음 함수처럼 더 범용적인 형태로 만들 수 있다.
template<typename T> void list_pq(std::priority_queue<T> pq, size_t count = 5) { size_t n{count}; while (!pq.empty()) { std::cout << pq.top() << ” “; pq.pop(); if (–n) continue; std::cout << std::endl; n = count; } std::cout << std::endl; }