• Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Катя , да, все верно. :)
    В твоем первоначальном коде инициализация нулями переменных min и max все и портила.
    Если мой, или чей-либо еще, ответ тебе помог, не забывай отметить его как решение.
  • Массив структур в c++?

    @MarkusD Куратор тега C++
    Данил ,
    Выводит ошибку

    Какую ошибку выдает? Где у тебя в вопросе описание ошибки? Где у тебя в вопросе определение твоей структуры? Зачем в объявлении параметра arr присутствует слово struct? Зачем в объявлении arr присутствуют квадратные скобки?
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Катя , а тип std::pair тебе пока ведь и не надо подробно понимать :)
    Общая его суть такова, что он просто несет в себе два значения - это же пара. В то же время std::tie принимает пару и достает ее значения в указанные переменные, т.е. буквально распаковывает пару. std::tie лучше пока тоже особо не изучать т.к. там на самом деле в основе лежит очень глубокий раздел метапрограммирования.
    Опуская тип пары и функцию распаковки этой пары можно сосредоточиться на том, что GetMinMax просто возвращает два значения - индекс минимального и индекс максимального значений в переданном массиве stream.

    Т.е. после того, как мы просмотрели все элементы массива через цикл for, мы ставим условие...

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

    Мы работаем логически: у нас две руки и лента с ячейками на столе перед нами. В левой руке - индекс минимального значения, в правой - индекс максимального. Глазами мы идем по ячейкам ленты слева-направо, останавливаясь на каждой ячейке отдельно. Смотрим на ячейку, запоминаем значение в ней, далее раскрываем левую руку и смотрим на ячейку по индексу в левой руке. Запомненное значение больше того, что по индексу в левой руке? Если да, то возвращаемся к запомненному значению и кладем в левую руку его порядковый индекс. Далее повторяем процесс с правой рукой: раскрываем руку, смотрим на значение по индексу в правой руке и если там лежит меньшее значение чем мы запомнили, то кладем индекс запомненного значения в правую руку. И так повторяем с каждой ячейкой.

    Может быть ты не до конца понимаешь синтаксис языка? Если после заголовка цикла (т.е. после
    for( size_t index = 1; index < stream_length; ++index )
    ) стоят фигурные скобки, то в них записано тело цикла - набор операций для каждой итерации цикла. В теле нашего цикла мы на каждой его итерации можем работать с уникальным индексом элемента массива.
  • Как сделать грамотную декомпозицию ООП?

    @MarkusD Куратор тега C++
    dsherbakov , ну да. И в примере всего два типа, и то оба избыточных и на корню ломающих принципы ООП. :)
    У тебя препод - весельчак чтоли? Любит шутки и мозголомные задачи?

    Ну ладно. Смотри вот.
    Стек - это первый твой тип. Второй тип - это хранилище памяти для стека, его суть в предоставлении уже готовой к использованию стеком памяти.
    Третий тип - это политика вставки в стек. Дело в том, что стек характеризуется только правилом вставки и изъятия элемента, но никак не характеризуется тем, с какой стороны блока памяти первые правила применять. Вставлять можно как в начало, так и в конец. Важно лишь то, что мы забираем только оттуда, куда вставляем.
    Четвертый - это политика изъятия. Тут все так же как и для политики вставки.
    И пятый тип - это политика работы с хранилищем - где в хранилище определено начало, а где конец, и.т.д.

    Сам стек в своих полях будет содержать объекты хранилища и каждой из трех политик и предоставляет организованный публичный интерфейс по правилам стека. Примечательно и то, что из имеющегося набора политик ты легко и очередь сделаешь, просто используя соответствующие политики в типе очереди.
    Политики вставки и изъятия - это контекстные типы. Они могут быть, и скорее всего будут, пустыми в плане данных, но каждый их метод будет оперировать на контексте из хранилища и политики управления хранилищем.
    Соответственно, политика управления хранилищем точно так же будет оперировать на контексте из самого хранилища.

    Хранилище умеет перевыделять память для того чтобы влезать в требуемый размер. Выделять оно умеет как впереди, так и сзади, согласно своему интерфейсу. После выделения памяти хранилище гарантирует консистентность уже заполненных ячеек. Значения в этих ячейках не должны меняться.
    Политика управления хранилищем имеет только 4 метода: вставить в начало хранилища, вставить в конец, удалить из начала и удалить из конца. Конкретная реализация политики уже должна знать, где именно у хранилища будет начало и конец, и должна говорить хранилищу увеличить или сократить память с нужного конца.
    Политик вставки всего две - в начало и в конец, каждая политика просто говорит политике управления, в какой из концов хранилища вставлять.
    Политик удаления тоже всего две - в начало и в конец.
    Соответственно, сам стек использует одну политику вставки в интересующее место, одну политику удаления из того же места, куда работает политика вставки, одну политику управления хранилищем и одно хранилище.
    При грамотной реализации типов ты из политик легко сможешь собирать разные типы стека и очереди: на массиве, на односвязном списке, на двусвязном, стек на хвосте массива, стек на шапке списка, очередь в любом варианте... В общем, как-то так.
  • Как сделать грамотную декомпозицию ООП?

    @MarkusD Куратор тега C++
    dsherbakov , из твоего вопроса откровенно непонятно, что же тебе все таки надо сделать.
    Что значит "СД Стек"? Что значит "брать классы как структуры"? Зачем "необходимо разбить мою задачу на 5 или более структур", почему 5, почему структур, каких структур?
    Какие задачи твой стек должен выполнять? Какой у него должен быть интерфейс? Почему он должен быть на массиве? Какие элементы он должен хранить?
  • Почему в файл выводятся непонятные символы?

    @MarkusD Куратор тега C++
    Сергей Саблин , твой основной ресурс - документация языка на https://en.cppreference.com/w/ .
    Документацию WinAPI стоит изучать на MSDN, у GNU тоже есть своя документация API.

    Функция 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 - тоже, т.к. с фундаментальными типами все довольно просто.
  • Почему в файл выводятся непонятные символы?

    @MarkusD Куратор тега C++
    VoidVolker , а можно поподробнее о том, как в отведенной для экземпляра структуры памяти может оказаться "даже какой-то код"? Еще, пожалуйста, поподробнее о семантике терминов "данных пользователя" и "служебные данные и поля". Чем поля отличаются от данных, когда поле является пользовательским, а когда служебным? Когда данные могут быть пользовательскими, а когда - служебными?

    Сергей Саблин, ты используешь объекты типов std::string и std::vector<int>. Расскажи про эти типы, как они работают, какая у них методология управления памятью. Частью какой библиотеки являются эти типы? К какой подсистеме этой библиотеки данные типы относятся?
    К какому семейству API относится функция fwrite?
    И самое важное: на каком именно языке реализовано то семейство API, к которому относится функция fwrite, и на каком именно языке реализованы шаблоны std::basic_string и std::vector?
  • Как правильно создать заголовок, реализацию файлы в C++?

    @MarkusD Куратор тега C++
    sanya84, так тот сценарий, которым ты пытаешься "создать Exe-ник", и называется сценарием сборки.
    Если ты просто дергаешь cl с названием одного файла, как в первой строке в тексте твоей ошибки, то твой проект так не соберется. Тебе нужно сделать сценарий сборки или для cmake, или для msbuild, или для еще какой-нибудь системы сборки проектов.
    Сценарии сборки для msbuild, например, это обычные проекты для Visual C++.

    Тут, понимаешь, ни кто кроме тебя пока не знает что тебе хочется сделать и как ты пытаешься добиться желаемого. Поэтому ни подсказать не получится, ни помочь толком.
  • Как правильно создать заголовок, реализацию файлы в C++?

    @MarkusD Куратор тега C++
    sanya84 , у тебя в теле вопроса нехватает еще одного текста: текста сценария сборки.
    По ошибкам видно что ты собираешь только один объектный файл и пытаешься линковать только его. И это неправильно.
    Тебе надо сперва получить все нужные тебе объектные файлы, а потом линковать их в бинарный образ. Это все делается через сценарий сборки твоего проекта.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Катя , если тебе что-то непонятно, есть вопросы или уточнения, то будет полезно изложить их в комментариях. Думаю, ты больше всех тут заинтересована в достижении понимания по своему вопросу.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Василий Мельников , про руки и умение писать все понятно. Только это все не важно.
    Тебе не стоит мне или Роме писать про такие случаи, т.к. это 100% промах и в целом попахивает пышной бравадой. В общем, ты тоже все прекрасно понимаешь. До определенных вещей опускаться не стоит.
    Кто так напишет, тот сам себе злобный буратина и должен сходить почитать документы.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Василий Мельников , так а std::minmax разве предназначен чтобы работать на диапазоне итераторов?
    Он работает на значениях и имеет перегрузку для списка инициализации. Вот для списка инициализации Roman и привел вариант.
  • Как проверить вещи зависящие от времени компиляции?

    @MarkusD Куратор тега C++
    Василий Мельников
    Как бы такое побороть, например пометить файл чтобы всегда пересобирался.

    Для этого достаточно добавить PreBuild step с удалением объектного файла требуемого модуля трансляции.
  • Возврат функции, int/void в чём различие. C++?

    @MarkusD Куратор тега C++
    Kezzya
    Скриншот - это по большей части второстепенное.

    Скриншот - это дело уважения. Посмотри на ситуацию вот как.
    Ты проявляешь уважение к своим собеседникам и не перегружаешь свой вопрос ненужной информацией. Скриншоты среды разработки - это очень сильная перегрузка информацией, с заведомо испорченным отображением текста - т.е. информации важной.
    Еще твой вопрос могут читать люди с не очень хорошей линией интернета, через мобильное устройство или слабую публичную сеть, возможно в период плановых работ провайдера и перебоев с трафиком.
    В ответ на уважение комментаторы тоже постараются проявить уважение к тебе даже если твой вопрос тянет на полное незнание основ используемого инструмента.

    Есть еще один момент. Если ответ тебе действительно помог, отметь его как решение. Это никак не остановит будущие ответы и предложение иного столь же полезного решения для твоей ситуации.
  • Можно ли из C++/CLR подключить либу на Си?

    @MarkusD Куратор тега C++
    sitev_ru , так все просто, у тебя неполный список библиотек для линковки.
    Либо, если ты напрямую встраиваешь MQTT, то уже модули трансляции этой библиотеки не подтягиваются при линковке.
    У тебя явно не с C++/CX проблемы, а со сценарием сборки.
  • Можно ли из C++/CLR подключить либу на Си?

    @MarkusD Куратор тега C++
    sitev_ru , я как-то не вижу текста с деталями твоих проблем с компиляцией.
    WinRT, C++/CLI, C++/CX спокойно линкуются вместе с чистыми библиотеками C/C++.
    Ты, кстати, неправильное название расширения языка указал. Будет еще лучше если ты правильно определишь используемое тобой расширение и исправишь ошибку. Так будет легче тебе помочь.
  • Передача ссылки на экземпляр объекта из конструктора?

    @MarkusD Куратор тега C++
    BadCats , лучше выписывать текст из Output Window (окно вывода), а не из Error Window (окно ошибок).
    Приведи в своем вопросе полный код обоих файлов.
    Какую задачу решают extern string и почему эту задачу нельзя было решить иным образом?

    К слову. Дружественные функции - это не методы, хоть и являются частью публичного интерфейса класса.
  • Что делать если линковщик ругается на "неразрешённый внешний символ"?

    @MarkusD Куратор тега C++
    Gotenks , ты, кстати, не все настройки проекта показал. :)
    Ругается у тебя линкер. Вот его настройки и нужны.
    Точнее, тебе надо заглянуть в "Linker -> Input -> Additional Dependencies". Там у тебя должны быть вписаны библиотеки зависимостей.
    start-vc-link-libs.png
    А еще вот тут должен быть вписан правильный путь до библиотек SFML.
    start-vc-paths.png

    Ну и в целом, ты же провел предварительную настройку проекта для работы с SFML?
  • Проблема с стандартными библиотеками Windows, что делать?

    @MarkusD Куратор тега C++
    Gotenks , Output Window - это Output Window (View -> Output) :)
    Это текстовый вывод компилятора и не только. У тебя разве не английская локализация студии?
    Сразу учти что в Output Window всегда находится много перегруженного лишней информацией текста, поэтому в открытом виде его в вопрос тоже не стоит писать. Текст из Output Window стоит положить в виде кода под спойлер.

    А внизу на скрине у тебя окно ошибок, оно никому не интересно кроме тебя самого. ))