C ++: заполнение вектора из канала - PullRequest
1 голос
/ 19 мая 2010

Я хотел бы заполнить мой vector<float> из командной строки:

more my.txt | myexe.x > result.txt

Как лучше всего открыть канал в C ++? Спасибо Arman.

Ответы [ 3 ]

10 голосов
/ 19 мая 2010

Ваша оболочка подключит стандартный выход more к стандартному входу myexe.x. Таким образом, вы можете просто читать с std::cin, и вам не нужно беспокоиться о том, поступает ли ввод с клавиатуры или какой-либо другой программы.

Например:

vector<float> myVec;
copy(istream_iterator<float>(cin), istream_iterator<float>(),
     back_inserter(myVec));
4 голосов
/ 20 мая 2010

Вы можете сделать это с std::copy() из <algorithm>, но вам не нужна эта дополнительная зависимость.

#include<iterator>

// ...
std::vector<float> them_numbers(std::istream_iterator<float>(std::cin),
                                std::istream_iterator<float>());

Если вы заранее точно знаете, сколько значений ожидаете, вы можете избежать перераспределений:

std::vector<float>::size_type all_of_them /* = ... */;
std::vector<float> them_numbers(all_of_them);
them_numbers.assign(std::istream_iterator<float>(std::cin),
                    std::istream_iterator<float>());
2 голосов
/ 19 мая 2010

Этот конкретный канал прикреплен к стандартному стандартному запросу вашего приложения, так что вы можете просто читать оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...