Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169

Принцип работы fstream

10.09.2015, 22:37. Показов 2447. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим у нас есть файл из четырех чисел, например: 453 32 43 54. Я создаю экземпляр класса ifstream и инициализирую массив из четырех элементов и просто считываю числа в массив, код ниже:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    ifstream fin("D:\\usr\\text.txt");
    int mas[4];
    for(int i = 0;i<4;i++)
    {
        fin>>mas[i];
        cout<<mas[i]<<endl;
    }
 
 
}
Интересует принцип по которому он считывает данные, как работает данный объект? Почему он не запишет просто 4 в массив потом 5 и 3, когда он понимает, что пора закончить ввод, в общем интересует принцип работы.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2015, 22:37
Ответы с готовыми решениями:

Аналоги методов работы с файлами из C в <fstream>C++
Какие аналоги имеют f-ы из C(fread,fseek,ftell и т.д.) в библиотеке fstream в C++? Я знаю, что все f-ы работают в C++, но всё же моя цель -...

Использование fstream для работы с ftp сервером
Здравствуйте. Имеется код: ifstream a; a.open(&quot;ftp://vasya:password@1.1.1.1/photo1&quot;); // адрес чисто для примера if (a) {ofstream...

Принцип работы функции
Помогите, пожалуйста, разобраться в принципе работы функции //Функция находит самую длинную неубывающую подпоследовательность void...

33
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.09.2015, 19:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
по вашему, #include <fstream> не имеет никакого отношения к STL,
Он имеет в виду, что Стандартная Библиотека С++ и STL относятся друг к другу, как общее к частному.
Т.е. STL - это часть стандартной библиотеки С++.
Помимо STL туда еще входит библиотека ввода-вывода и дополнительные и вспомогательные инструменты (поддержка исключений, rtti, локализация, библиотека С и т.п.).
STL - это только
1) <vector>, <list>, <deque>, <stack>, <queue>, <set>, <map>
2) <functional>, <algorithm>, <numeric>
3) <utility>, <iterator>, <memory>
Остальное относится к другим частям Стандартной Библиотеки и не относится к STL.
Вот, собственно здесь описана, градация.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.09.2015, 19:41
Цитата Сообщение от lss Посмотреть сообщение
Из чего видно, что является?
C++
1
typedef basic_fstream<char> fstream;
ну например, из того, что является "стандартным шаблоном".

а вообще, стандартная библиотека состоит из подмножества си, и STL.
так что все, что не сишное, можно смело определять в STL.

оно все там оч тесно повязанно.
грубо говоря, вы не сможете выдрать fstream так, что бы оно не потащило за собой какие то части STL
например, тайп-трейтсы, итераторы, и др.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.09.2015, 19:58
Цитата Сообщение от hoggy Посмотреть сообщение
ну например, из того, что является "стандартным шаблоном".
Шаблон - это не обязательно STL.
Цитата Сообщение от hoggy Посмотреть сообщение
так что все, что не сишное, можно смело определять в STL.
Можно, но не нужно.
Миниатюры
Принцип работы fstream  
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.09.2015, 20:59
Цитата Сообщение от lss Посмотреть сообщение
Шаблон - это не обязательно STL.
я понимаю, что если я своими руками напишу шаблоно-код,
то часть стл он не будет.

но и вы поймите:
стримы исповедуют единное архитектурное решение с каким нибудь стл-контейнером.

не просто единая архитектура, это - единый стиль.

если верить господину DrOffset, то в STL не входит std::string
вот только std::string,
который тайпдеф над базовым стрингом очень даже выполнен по ехидой схеме и в едином стиле,
как любой другой стл-контейнер.

и может быть полноценным участником наряду с ними в тех же алгоритмах.

теперь смотрим на стримы,
и видим, что fstream - это тайпдеф над базовым стримом.

а если компнем глубже, увидим завязки на тайп-трейтсы,
завязки на итераторы, завязки на...


фактически получается, что вся стандартная библиотека - монолитная.
из неё без аццких приседаний не возможно ничего выдернуть.

одно потянет за собой другое.

вы конечно можете формально полагать,
что стл - это тупо контейнеры, алгоритмы и итераторы.
а все остально - типо особняком стоит.

вот только это будет не более, чем формальность,
потому что по факту все так повязанно, что не оторвешь.

лично я полагаю стл любой стандартный законченный шаблоно код.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.09.2015, 21:07
Цитата Сообщение от hoggy Посмотреть сообщение
я понимаю, что если я своими руками напишу шаблоно-код,
то часть стл он не будет.
Хотел исправить, но не успел: шаблон стандартной библиотеки - это не обязательно STL.
Цитата Сообщение от hoggy Посмотреть сообщение
стримы исповедуют единное архитектурное решение с каким нибудь стл-контейнером.
не просто единая архитектура, это - единый стиль.
если верить господину DrOffset, то в STL не входит std::string
вот только std::string,
который тайпдеф над базовым стрингом очень даже выполнен по ехидой схеме и в едином стиле,
как любой другой стл-контейнер.
Стиль - это стиль, а является частью STL или не является, это о другом.
Цитата Сообщение от hoggy Посмотреть сообщение
вы конечно можете формально полагать,
что стл - это тупо контейнеры, алгоритмы и итераторы.
а все остально - типо особняком стоит.
Почему особняком? Все входит в стандартную библиотеку.
Цитата Сообщение от hoggy Посмотреть сообщение
вот только это будет не более, чем формальность,
Тут разговор, в общем, о формальном: есть STL, есть то, что входит в стандартную библиотеку С++, но не входит в STL.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.09.2015, 21:10
Цитата Сообщение от lss Посмотреть сообщение
Почему особняком? Все входит в стандартную библиотеку.
Цитата Сообщение от lss Посмотреть сообщение
Тут разговор, в общем, о формальном: есть STL, есть то, что входит в стандартную библиотеку С++, но не входит в STL.
ну вот простой пример: итераторы - часть стл.
как быть с итераторами стримов?

по факту они - часть итераторов
#include <iterator>
но взаимодействуют со стримами.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.09.2015, 21:11
Цитата Сообщение от hoggy Посмотреть сообщение
лично я полагаю стл любой стандартный законченный шаблоно код
Лично полагать никто не мешает, но позволь тогда и другим лично полагать по-другому, например, формально.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.09.2015, 21:17
Цитата Сообщение от lss Посмотреть сообщение
Лично полагать никто не мешает, но позволь тогда и другим лично полагать по-другому, например, формально.
так я же не против.
более того: я понимаю точку зрения людей,
которые придерживаются "формального положения".


вот этой фразой:
Цитата Сообщение от hoggy Посмотреть сообщение
вы конечно можете формально полагать,
что стл - это тупо контейнеры, алгоритмы и итераторы.
а все остально - типо особняком стоит.
я хотел дать вам понять, что понимаю,
как обстоит с этим дело в "формальном" смысле.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
11.09.2015, 21:19
Я не буду говорить, что считаю частью Стандарт Темплейт Лайбрари, а что нет, потому что не знаю, да и не не хочу формировать какое-то определенное мнение - обсуждающие в последних постах хорошо раскрыли суть спора: это вопрос о терминах и не более.
А насчет того, что я говорю что не использую STL (во многом потому что не умею, а не умею потому что на чистом Си на микроконтроллерах ее не было, а ради десктопа я ее не изучил ), но при этом пишу cin|cout - ну я могу и сканэфы/принтэфы писать, и путчары/гетчары, только это более длинно и громоздко, поэтому я выбираю писать как короче. Но это же только в учебных задачах этого раздела, в консольных приложениях. В моем оконном тетрисе у меня никаких цинов-цаутов и принтэфов, например, в микроконтроллерных проектах путчары и редко принтэфы (они тормозные и не укладываются в тайм слоты часто) у меня тоже исключительно для отладочной печати, в финальном проекте их нет. Так что это вынужденное использование, уж прошу меня за это простить и не считать предающим идеалы "чистого без стандартно-библиотечного языка" из-за использования всего двух методов
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
11.09.2015, 21:21
Цитата Сообщение от DrOffset Посмотреть сообщение
Можно начать с этого интервью.
Прочитал. У него очень интересное отношение к ООП. Он проводит аналогию с математикой и говорит, что математики обычно начинают с доказательств, а аксиомы уже формулируют потом. И он говорит, что начинать проектирование с объектов - это все равно что начинать в математике с аксиом.
Мне это кажется не совсем верным. Формулируя доказательство, мы уже опираемся на интуитивно ощущаемые аксиомы. Так же и в проектировании - сначала мы берем интуитивно ощущаемые объекты и формулируем их интерфейс. Затем в процессе итераций проектирования объекты уточняются.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.09.2015, 21:21
Цитата Сообщение от hoggy Посмотреть сообщение
я хотел дать вам понять, что понимаю,
как обстоит с этим дело в "формальном" смысле.
Тогда о чём спор?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.09.2015, 21:22
Цитата Сообщение от hoggy Посмотреть сообщение
если верить господину DrOffset, то в STL не входит std::string
вот только std::string,
который тайпдеф над базовым стрингом очень даже выполнен по единой схеме и в едином стиле,
как любой другой стл-контейнер.
Да, не входит. Потому что его добавили позже, cразу в Стандартную Библиотеку, а не отдельно в STL. Но термин STL, формально, более не используется, поэтому это не настолько важно.
Термин STL - это исторический термин. Это термин из тех времен, когда была библиотека STL Степенова и Ли, была библиотека iostreams за авторством кого-то из AT&T (позабыл фамилию) и др. Т.е. когда они существовали отдельно.
Естественно в современных условиях все переплелось. STL с остальными частями стандартной библиотеки, а Стандартная Библиотека с языком (вспомним type_info, std::initializer_list и т.д.).
Так что, ребята, спорить тут, в общем-то, не о чем.
2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.09.2015, 21:30
Цитата Сообщение от lss Посмотреть сообщение
Тогда о чём спор?
так мы вроде бы и не спорили...

просто, общаемся, делимся мнениями
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
11.09.2015, 21:51
М. Уилсон "Расширение библиотеки STL для С++. Наборы и итераторы"
1.1. Основные понятия
В основе библиотеки STL лежат шесть понятий: контейнеры, итераторы, алгоритмы, объекты функции, адаптеры и распределители (памяти). В контейнерах хранятся объекты. Итератор – это не зависящая от структуры данных абстракция, позволяющая получать доступ к элементам контейнера и обходить диапазоны элементов. В алгоритмах итераторы применяются для обобщенного манипулирования диапазонами элементов, ничего не зная о типах самих элементов и структурах данных, в которых они размещаются. С помощью объектов функций определяются обобщенные операции, применяемые к элементам, которыми манипулируют алгоритмы. Адаптеры позволяют согласовать между собой несопоставимые типы путем изменения их интерфейсов. Различают адаптеры класса (они адаптируют сами типы) и адаптеры экземпляра (они адаптируют экземпляры типов). Распределители абстрагируют операции распределения памяти и конструирования объектов, выполняемые контейнерами.

С использованием термина STL в мире C++ царит некая путаница. Строго говоря, он относится к обобщенной библиотеке шаблонов, которая выстроена на базе шести основных понятий и была разработана Степановым и его сотрудниками между 1980 и 1990 г.г. Но сейчас мы употребляем термин STL просто для обозначения того подмножества стандартной библиотеки C++, в котором используются эти шесть понятий. У этого смещения акцентов есть два следствия. Во первых, существует немало ревнителей чистоты C++, которые ухватятся за любую возможность поставить вас на место за неправильное употребление слова STL, указав приэтом, что вы, вероятно, имели в виду стандартную библиотеку. Во вторых, в стандартной библиотеке есть совместимые с STL вещи, которых в исходном варианте STL не было. Прежде всего, речь идет о потоках ввода/вывода IOStreams. В педагогических целях я буду отмечать STLные особенности IOStreams в разных местах книги, а в главе 34 рассмотрю одно расширение STL, которое целиком относится к IOStreams. Так или иначе, я всюду буду говорить просто STL, поскольку так короче, а заниматься теми компонентами стандартной библиотеки, которые не пересекаются с оригинальной версией STL, мы не собираемся. Кроме того, слово стандартный я хочу зарезервировать для обозначения компонентов, которые включены в стандартную библиотеку или согласуются с требованиями, сформулированными в стандарте C++ (редакция C++ 03).
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2015, 21:51
Помогаю со студенческими работами здесь

Принцип работы pthread_join
Есть код функции pthread_join из glibc. Подскажите: 1) Номер строки и что происходит, если для потока уже вызвали pthread_join? Тут...

Принцип работы конструктора
Объясните пожалуйста на простом примере принцип работы конструктора в С++. Я сейчас начал их изучать и никак не могу въехать. Спасибо.

Принцип работы рекурсии
Искал в инете и в поиске, но никак не могу понять принцип работы рекурсии программно. Допустим есть функция int f(int n) { if(0 ==...

Принцип работы strpbrk
Изначально я думал, что он возвращает только 1ый символ, но эта функция _string operator*(_string &amp;a){ _string t; ...

объсните принцип работы
Объясните кому не сложно принцип работы данной программы Планируется переписывание на паскале #include &lt;fstream&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru