Чтение строки целых чисел непосредственно в вектор - PullRequest
0 голосов
/ 10 декабря 2018

Я читаю содержимое файла через cin, и мне нужно разобрать первую строку

Файл выглядит так:

1 2 3 4
1->3
2->5
...

Так что в основном мой первый шаг - это прочитатьпервая строка в векторе целых чисел.

Мой подход следующий:

std::string line;
std::vector<int> initial;

std::getline(std::cin, line);
std::istringstream iss(line);
int aux;

while (iss >> aux) {
    initial.push_back(aux);
}

Это работает, и мой вектор initial правильно содержит 4 целых числа первой строки.Однако я чувствую, что я делаю много преобразований, которые можно было бы сделать более прямым способом.

Я читаю первую строку в строку, а затем преобразовываю эту строку в поток.Попытка непосредственного чтения в поток, но компилятор жалуется.

std::istringstream iss();
std::getline(std::cin, iss);

Затем я перебираю строку для получения отдельных целочисленных значений и сохраняю их во вспомогательном int, прежде чем помещать в вектор.Я попытался напрямую поместить их в вектор, но опять-таки не удалось (по крайней мере, так, как я это делаю)

while (iss >> initial) {
}

Есть ли более простой способ получить одну строку из cin, состоящую из целых чисел, разделенных пробелом?прямо в вектор целых чисел?

1 Ответ

0 голосов
/ 10 декабря 2018

Я начну с конца:

while (iss >> initial) { ... }

Это легко можно сделать, используя std::back_inserter:

std::vector<int> v;
auto inserter = std::back_inserter(v);

while (iss >> *inserter) { ... }

Честно говоря, яВозможно, вы бы оставили все как есть, но если вам абсолютно необходимо, вы можете использовать std::istream_iterator для прямой инициализации вектора:

std::vector<int> v (std::istream_iterator<int>(iss), std::istream_iterator<int>());
...