Я пытаюсь читать из 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
Согласно комментарию, первая последовательность цифр больше, чем максимальное значение для int
поэтому операция ввода потерпит неудачу, что приведет к vector
оставаясь пустым.
Вы можете получить максимальные значения для int
и т.д., используя std::numeric_limits
шаблон:
std::cout << std::numeric_limits<int>::max() << "\n";
В качестве промежуточного шага вы можете попытаться выполнить итерацию последовательности немедленно, чтобы увидеть, есть ли что-то (вероятно, нет):
while (iit != eos) {
std::cout << *iit++ << '\n';
}
Если это ничего не печатает, проверьте, что ваш поток изначально в хорошей форме:
if (!fin) {
std::cout << "file not opened!\n";
}
Если поток содержит только цифры и пробелы, он, вероятно, переполняется и читает int
просто не получается в результате.