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;
}
因为你可以看到我有一个学校项目将cin转移到优先级队列。好吧,我“有点做了......我做的是输入 istream_iterator 列出
然后再写入priority_queue,从长远来看这是非常低效的。那么有没有办法转移直接cin到priority_queue而没有中间人。我试过这样做但复制功能不会让我把priority_queue作为争论。
答案 0 :(得分:3)
您可以从迭代器priority_queue
对构造[first, last)
(或任何std容器)。来自cpp reference:
template <class InputIterator>
priority_queue ( InputIterator first, InputIterator last,
const Compare& x = Compare(),
const Container& y = Container() );
第一,最后
将迭代器输入到a中的初始位置和最终位置 序列。使用的范围是[first,last),包括所有 first和last之间的元素,包括指向的元素 第一个但不是最后指向的元素。功能模板类型 可以是任何类型的输入迭代器。
代码:
#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();
}
}
答案 1 :(得分: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();
}
}