Выводит ошибку
arr
присутствует слово struct
? Зачем в объявлении arr
присутствуют квадратные скобки? std::pair
тебе пока ведь и не надо подробно понимать :)std::tie
принимает пару и достает ее значения в указанные переменные, т.е. буквально распаковывает пару. std::tie
лучше пока тоже особо не изучать т.к. там на самом деле в основе лежит очень глубокий раздел метапрограммирования.GetMinMax
просто возвращает два значения - индекс минимального и индекс максимального значений в переданном массиве stream
.Т.е. после того, как мы просмотрели все элементы массива через цикл for, мы ставим условие...
for( size_t index = 1; index < stream_length; ++index )
) стоят фигурные скобки, то в них записано тело цикла - набор операций для каждой итерации цикла. В теле нашего цикла мы на каждой его итерации можем работать с уникальным индексом элемента массива. fwrite
реализована на языке C и является частью file i/o API. std::basic_string
является частью Strings Library, а std::vector
- частью Container Library в Standard Template Library, реализованной на языке C++.fwrite(&name, sizeof(name), 1, f);
nazv
или a
не хранится, там хранятся только указатели на выделенную память + довольно много сервисных полей. Даже учитывая SSO нельзя говорить что данные самой строки размещаются внутри объекта std::string
, т.к. в общем смысле это не так.fwrite(&name.nazv, sizeof(string), 1,f);
fwrite(&name.semestr, sizeof(int), 1,f);
fwrite(&name.a, sizeof(name.a), 1,f);
fwrite
, откуда ей на самом деле стоит брать память для формирования нужного тебе формата файла. Эта функция ничего не знает о строках и типах, о размещении в памяти и структуре того или иного объекта. Она принимает просто кусок памяти и пишет его в файл по текущей позиции в файле. Все.std::string
и std::vector
в интерфейсе есть функция data
(для строки, для вектора) для получения указателя на подконтрольную память. В случае строки ты эту память можешь писать сразу в файл. В случае вектора от int
- тоже, т.к. с фундаментальными типами все довольно просто. std::string
и std::vector<int>
. Расскажи про эти типы, как они работают, какая у них методология управления памятью. Частью какой библиотеки являются эти типы? К какой подсистеме этой библиотеки данные типы относятся?fwrite
?fwrite
, и на каком именно языке реализованы шаблоны std::basic_string
и std::vector
? std::minmax
разве предназначен чтобы работать на диапазоне итераторов?Как бы такое побороть, например пометить файл чтобы всегда пересобирался.
Скриншот - это по большей части второстепенное.
extern string
и почему эту задачу нельзя было решить иным образом?
В твоем первоначальном коде инициализация нулями переменных
min
иmax
все и портила.Если мой, или чей-либо еще, ответ тебе помог, не забывай отметить его как решение.