istream_iterator для инициализации вектора

Я пытаюсь читать из ifstream плавник и положить его в вектор vec1 используя istream_iterators. Я видел эти вещи повсюду:

vector<int> vec1((istream_iterator<int>(fin)),istream_iterator<int>);

Я хочу сохранить istream_iterators для дальнейшего использования, поэтому я подумал: «Это должно работать»:

istream_iterator<int> iit(fin);
istream_iterator<int> eos;
vector<int> vec1(iit,eos);

… Это не работает = (мой вектор полностью пуст. (Файл, из которого я читаю, является txt-файлом только с цифрами).

РЕДАКТИРОВАТЬ: Текст выглядит следующим образом:

06351784798452318596415234561
6641321856006

0

Решение

Согласно комментарию, первая последовательность цифр больше, чем максимальное значение для int поэтому операция ввода потерпит неудачу, что приведет к vector оставаясь пустым.

Вы можете получить максимальные значения для intи т.д., используя std::numeric_limits шаблон:

std::cout << std::numeric_limits<int>::max() << "\n";
1

Другие решения

В качестве промежуточного шага вы можете попытаться выполнить итерацию последовательности немедленно, чтобы увидеть, есть ли что-то (вероятно, нет):

while (iit != eos) {
std::cout << *iit++ << '\n';
}

Если это ничего не печатает, проверьте, что ваш поток изначально в хорошей форме:

if (!fin) {
std::cout << "file not opened!\n";
}

Если поток содержит только цифры и пробелы, он, вероятно, переполняется и читает int просто не получается в результате.

0

По вопросам рекламы [email protected]