Случайный список целых чисел - PullRequest
1 голос
/ 25 апреля 2011

Если бы у меня был список целых чисел, разделенных пробелом в одной строке (например: 50 34 1 3423 5 345), то каков наилучший способ сделать каждую из них отдельной целочисленной переменной - собрать список целых чисел сcin

Ответы [ 3 ]

8 голосов
/ 25 апреля 2011
#include <iostream>
#include <vector>
#include <iterator>

std::vector<int> ints;
std::copy(std::istream_iterator<int>(cin), 
      std::istream_iterator<int>(), 
      std::back_inserter(ints));

Готово. Если вам действительно нужно точно прочитать построчно:

#include <sstream>
#include <iostream>
#include <vector>
#include <iterator>

std::string singleline;
std::istringstream iss; // out of loop for performance
while (std::getline(cin, singleline))
{
      iss.str(singleline);
      std::copy(std::istream_iterator<int>(iss), 
            std::istream_iterator<int>(), 
            std::back_inserter(ints));
}

istream_iterator<int> будет повторно применять operator>>(int&) к указанному потоку (до конца потока). По умолчанию это автоматически игнорирует пробелы и выдает исключение, если операция ввода завершилась неудачно (например, встречается нецелочисленный ввод)

Back_inserter - это выходной итератор , который вы можете использовать со всеми типами контейнеров (например, vector), которые поддерживают операцию .push_back. Так что на самом деле то, что там написано в алгоритме STL, похоже на

std::vector<int> ints;
while (iss>>myint)
{
     ints.push_back(myint);
}
7 голосов
/ 25 апреля 2011

В ответ на ответ sehe, вот как вы будете делать это более многословно ( ahem ).

Алгоритмы, которые sehe использовал в основном doэто внутренне.Этот ответ включен в основном для ясности.

#include <iostream>
#include <vector>

int main()
{
   std::vector<int> myInts;

   int tmp;
   while (std::cin >> tmp) {
      myInts.push_back(tmp);
   }

   // Now `myInts` is a vector containing all the integers
}

Живой пример.

0 голосов
/ 25 апреля 2011

Посмотрите справочные страницы для strtok( ) и atoi( )

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