2012-05-13 78 views
0
int main() 
{ 
    list<char> letters; 
    priority_queue<char, vector<char>, less<char>>letters_trans; 

    cout << "Enter some sentence: " << endl << endl; 

    std::istream_iterator<char> input(cin), input_end; 

    copy(input, input_end, back_inserter<list<char>>(letters)); 

    for each(char letter in letters) 
    { 
     letters_trans.push(letter); 
    } 

    while(!letters_trans.empty()) 
    { 
     cout << letters_trans.top(); 
     letters_trans.pop(); 
    } 
    cout << endl; 
    getch(); 
    return 0; 
} 

Priority_queue和輸入流迭代器

所以你可以看到我有一個學校項目將cin轉移到優先級隊列。嗯,我「有點誰幹的,我所做的是輸入istream_iterator列出

然後priority_queue,這是非常低效我想從長遠run.So有沒有辦法直接CIN到priority_queue轉移沒有中間人。我試圖這樣做,但複製功能不會讓我有priority_queue作爲arguement

回答

1

在C++ 11,這應該工作:

std::priority_queue<char> q(std::istream_iterator<char>(std::cin), std::istream_iterator<char>()); 

完整的示例:

#include <iostream> 
#include <iterator> 
#include <vector> 
#include <queue> 

int main() 
{ 
    std::priority_queue<char> q(std::istream_iterator<char>(std::cin), std::istream_iterator<char>()); 

    while (!q.empty()) 
    { 
     std::cout << q.top() << '\n'; 
     q.pop(); 
    } 
} 
+1

爲什麼中間載體?優先級隊列可以直接由一對輸入迭代器構造。 –

+0

@AlanStokes:的確,我錯過了那個構造函數。修正了,謝謝! –

3

你可以const從一對迭代器[first, last)中輸入priority_queue(或任何std容器)。從cpp reference

template <class InputIterator> 
     priority_queue (InputIterator first, InputIterator last, 
          const Compare& x = Compare(), 
          const Container& y = Container()); 

第一,最後

輸入迭代器在 序列中的最初和最後的位置。使用的範圍爲[第一,最後一個),其包括第一和最後之間的所有 要素,包括通過 第一個但不是由最後指出的元件所指向的元素。函數模板類型 可以是任何類型的輸入迭代器。

代碼:

#include <iostream> 
#include <iterator> 
#include <queue> 
#include <vector> 

int main() 
{ 
    std::istream_iterator<char, std::vector<char> > input(std::cin), input_end; 
    std::priority_queue<char> q(input, input_end); 

    while (!q.empty()) 
    { 
    std::cout << q.top() << std::endl; 
    q.pop(); 
    } 
} 
+0

這是使用帶兩個InputIterator的構造函數 - input和input_end不是指針。 –

+0

@AlanStokes謝謝。改性。構造函數簽名是從[sgi](http://www.sgi.com/tech/stl/priority_queue.html)複製粘貼的。 – Vikas