Заполнение очереди из файла

278
25 декабря 2017, 13:28

Как заполнить стандартный контейнер очередь (queue) данными из файла с помощью стандартных алгоритмов?

Answer 1

В качестве альтернативного варианта предложу обойтись без вспомогательного контейнера и добавлять сразу в очередь с помощью std::for_each/3:

#include <queue>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
int main()
{
    std::ifstream in("number.txt");
    std::queue<int> Q;
    std::for_each(std::istream_iterator<int>(in),
                  std::istream_iterator<int>(),
                  [&Q](int n)
    {
        Q.push(n);
    });
    while(!Q.empty())
    {
        std::cout << Q.front() << '\n';
        Q.pop();
    }
}
Answer 2

Например, заполните контейнер, а потом сделайте на его базе очередь:

ifstream in("file");
deque<int> D;
copy(istream_iterator<int>(in),istream_iterator<int>(),
     back_inserter(D));
queue<int> Q(D); // Можно move(D), если отдельный дек больше не нужен
while(!Q.empty())
{
    cout << Q.front() << endl;
    Q.pop();
}

Только стандартные алгоритмы :)

Ага, раз принят ответ, где допускается что-то кроме алгоритмов - то тогда все, конечно, гораздо проще:

for(int n; cin>>n;) Q.push(n);

Все, больше ничего не нужно.

READ ALSO
Ошибка при инициализации vector&lt;string&gt;

Ошибка при инициализации vector<string>

Добрый день! Я студент технического вуза и самостоятельно пытаюсь выучить c++Что пытаюсь сделать :

254
Как изменить текст элемента управления static?

Как изменить текст элемента управления static?

Сначала получал дескриптор статика и использовал setwindowtext, но почему-то не робит

206
Надо ли писать два двоеточия перед std?

Надо ли писать два двоеточия перед std?

Некоторые авторы используют два двоеточия ("::") перед неймспейсом std, например:

231