Двач.hk не отвечает.
Вы видите копию треда, сохраненную 7 июня 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
35 Кб, 512x512
C++ тред 32 #736493 В конец треда | Веб
оп наш что то охуел
стих придумать не успел
запилю ка перекат
пусть анончик будет рад


прошлый тред: >>726671 (OP)

TL;DR

Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.

Памятка ньюфагу

  • Вопросы по синтаксису идут на хуй
  • Лабы идут на хуй
  • "Как мне сделать Х на чистых крестах без библиотек" идут на хуй
  • Все идут на хуй
  • Хейтер сосет члены на пару со своей мамашей

Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.


FAQ

Мотивация

Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:

  • Скорость
    C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
  • Мощь
    C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
  • Популярность
    C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.

Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".

Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполне возможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.

Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Эти фичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.


Литература

Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:

  • Для нюфань

    Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:


    Автор(ы) Название Год Ссылка
    Бьерн Страуструп Программирование. Принципы и практика использования C++ 2016 https://yadi.sk/i/Yd6KKpLBqJSUr
    Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela
    Стивен Прата Язык программирования C++ 2012 https://goo.gl/z7kA8u

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


    Автор(ы) Название Год Ссылка
    Герберт Шилдт C++. Базовый курс 2010 https://goo.gl/qMLAFl
    Роберт Лафоре Объектно-ориентированное программирование в C++ 2004 https://goo.gl/QvjR6x

  • Best practices

    Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все:


    Автор(ы) Название Год Ссылка
    Скотт Мейерс Эффективное использование C++ 2005 https://goo.gl/wsDXGz
    Скотт Мейерс Наиболее эффективное использование C++ 1996 https://goo.gl/tHa0tO
    Скотт Мейерс Эффективный и современный C++ 2015 https://goo.gl/Im8VYQ
    Скотт Мейерс Эффективное использование STL 2002 https://goo.gl/QtS8Dc
    Герб Саттер и Андрей Александреску Стандарты программирования на языке C++ 2005 https://goo.gl/Cpk4YR

  • Проектирование

    Следует пролистать все перед переходом от лаб к написанию настоящего софта.
    Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:


    Автор(ы) Название Год Ссылка
    Ален Голуб Веревка достаточной длины, чтобы выстрелить себе в ногу 2001 https://goo.gl/fBmuxp
    Джеймс Коплиен Программирование на C++ 2005 https://goo.gl/Y1WGdU
    Андрей Александреску Современное проектирование на C++ 2002 https://goo.gl/e1V5BC

    Ахтунг!
    Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).

  • Справочники

    Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:


    Автор(ы) Название Год Ссылка
    Бьерн Страуструп Язык программирования C++ 2013 https://goo.gl/XkAiOX (на ангельском)
    Бьерн Страуструп Язык программирования C++ 2010 https://goo.gl/iZBDiV <устарело>

    Кроме того, на ангельском доступны стандарты C++11, C++14, а также последняя версия черновика стандарта C++17.

  • Тонкости языка

    Книги для тех, кто возлюбил кресты всей душой и желает углубиться в детали:


    Автор(ы) Название Год Ссылка
    Герб Саттер Решение сложных задач на C++ 2002 https://goo.gl/iWaa6S
    Герб Саттер Новые сложные задачи на C++ 2004 https://goo.gl/4nn512
    Бьерн Страуструп Дизайн и эволюция C++ 1994 https://goo.gl/FqbPwo (для легкого чтения)

  • Отдельные аспекты

    Читать по необходимости:


    Автор(ы) Название Год Описание Ссылка
    Энтони Уильямс Параллельное программирование на C++ в действии 2012 Про использование std::thread
    и других фич последних стандартов
    для разработки многопоточных приложений
    https://goo.gl/qJfBkD
    Николаи Джоссатис C++. Стандартная библиотека 2012 Детальный справочник по STL и
    остальным частям стандартной библиотеки
    https://goo.gl/PEyiMH
    Дэвид Абрахамс и Алексей Гуртовой Шаблонное метапрограммирование на C++ 2009 "Мы встроили в шаблоны C++ функциональный
    язык программирования, чтобы ты мог
    программировать, пока программируешь"
    https://goo.gl/isSt7j
    Дэвид Вандевурд и Николаи Джоссатис Шаблоны C++. Справочник разработчика 2003 После прочтения этой книги тебя не приведут
    в ужас даже исходники boost::MPL
    https://goo.gl/0M4NpG
    Роберт Седжвик Фундаментальные алгоритмы на C++ 2001 Стандартный курс алгоритмов с примерами
    на C++. Для его чтения не нужно знать
    мертвые языки, в отличие от этого вашего Кнута
    https://goo.gl/4jwxSl (части 1-4),
    https://goo.gl/yDuQgG (часть 5)


Другие обучающие материалы

Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три

Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:

  • Годный блог, в котором все просто и понятно тян не нужны кококок борщ
  • Блог с хорошо расписанными фичами новых стандартов
  • Краткие описания библиотечных функций и контейнеров - на русском или более подробно на ангельском
  • Блог Герба Саттера (на ангельском)
  • Блог Скотта Мейерса (на ангельском)
  • Блог еще одной тянки, много о Qt и оптимизации (на ангельском)
  • Куча других блогов (на ангельском)
  • Большой FAQ по C++ (на ангельском)
  • Видео с CppCon (на ангельском)


Софт и библиотеки

Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:


Платформа Название Описание Ссылка
Windows Microsoft™ Visual Studio® Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда https://goo.gl/qgAAc6 (русская версия) или
https://goo.gl/WIPW9L (ангельская версия)
Все CodeLite Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM http://codelite.org/,
"sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все CLion IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует https://www.jetbrains.com/clion

Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.

Разумеется, установка IDE вовсе не обязательна. Ты можешь использовать текстовый редактор в связке с каким-нибудь компилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.

Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:

  • Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
  • Более навороченный, но коммерческий аналог
  • Встроенный в clang статический анализатор
  • Детектор утечек для Visual Studio. Предельно прост в прикручивании
  • На порядок более мощная и сложная утилита для *nix, служащая тем же целям
  • Гугловские утилиты для контроля корректности кода
  • Гугловский фреймворк для автоматизации тестирования

Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.

Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:

  • boost

    Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.

    Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.

    Литература:


    Автор(ы) Название Год Ссылка
    Ариндам Мукерджи Learning Boost C++ Libraries 2015 https://goo.gl/b0gPN1 (на ангельском)

  • Qt

    Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.

    Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.

    В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.

    Литература:


    Автор(ы) Название Год Ссылка
    Макс Шлее Qt 5.3. Профессиональное программирование на C++ 2015 https://goo.gl/aZ66gK
    Макс Шлее Qt 4.8. Профессиональное программирование на C++ 2012 https://goo.gl/Slb1In (книга) +
    https://goo.gl/toUDWc (исходники примеров)
    Марк Саммерфилд Qt. Профессиональное программирование 2011 Только Qt 4.х:
    https://goo.gl/qpkZFm (книга) +
    https://goo.gl/LIIECh (исходники примеров)

  • Другие хорошие библиотеки

    Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:

    • libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
    • SFML - работа с графикой и аудио
    • FLTK - графические интерфейсы

    И еще куча библиотек на любой вкус.


Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.


#2 #736516
>>736493 (OP)
Стих получше чем у предыдущего опа
>>737167
#3 #736654
>>736493 (OP)
Проиграно!

Мне уже нравится этот тред.
#4 #736878
блять проебали юбилейный тред а оп наверно к нему особый стишок готовил или оп-пик рисовал
>>736922
#5 #736922
>>736878

>блять проебали юбилейный тред а оп наверно к нему особый стишок готовил или оп-пик рисовал


Ути-пути какие мы нежные. Стишочек не завезли, картиночка не радует глаз - все, буду сидеть в бамплимите и кушать говно.
>>736942
sage #6 #736942
>>736922
Кушать говно не обязательно.
>>736990
#7 #736990
>>736942
Пошел нахуй
61 Кб, 317x372
#8 #737146
Вот такой код:

const string s = "Sap /pr";
for (auto &c : s){ /... / }

Написано, что для c выводится тип const char&. Почему? Разве auto не отбрасывает const? Или при амперсанде в деклараторе это будет low-level const?

И еще: тут s типа const string. В объектах типа string символы наверное хранятся как char массив или что-то типа того, а если это const string объект, то по идее как const char.
Вопрос: каким образом при создании const string объекта внутри него char преобразуется в const char?
#9 #737161
>>737146
Почитай про вывод типов
#10 #737167
>>736516
Если к достоинству всратости прибавить достоинство краткости, то у стиха из шапки будет не менее двух достоинств, господа мушкетеры.
#11 #737197
>>737146

>каким образом при создании const string объекта внутри него char преобразуется в const char?


Никаким не преобразуется. У строки есть char begin() и const char begin() const. Компилятор видит, что строка константная, и выбирает последний вариант для итератора.
>>737259
#12 #737200
>>737146
1) С какого хуя auto что-то там должен отбрасывать? На его место просто подставляется таргетный тип. Отбрасывать const можно и нужно с помощью const_cast, а так же всегда можно сделать это через c-style или reinterpret_cast и выстрелить себе в ногу из жопы;
2) Открываешь реализацию итератора, смотришь что, как и с каким типом там возвращается;
3) Сука, если тебе не нужно менять символы - не передавай их по ссылке, на x64 это будет медленнее варианта с копированием лол.
#13 #737201
Is Huile
Not good
Based on a roll
Antonczyk announced joy
>>737333
#14 #737259
>>737197
char возвращается оператором [] из строки. Если эта строка константная, то этот char в const char компилятор также преобразует?

Это же костыль, и он неочевиден. "низкоуровнеый язык, всем управляет программист" охуенно.
>>737263
#15 #737263
>>737259
В стринге есть два переопределенных оператора [], один из них возвращает char&, другой просто char.
В случае, если стринг не константный, то будет вызван первый оператор и вернется char&, во втором случае будет вызван второй оператор.
#16 #737287
Тут есть гуру Qt?
Не работает велосипедное смешание QTcpServer/QTcpSocket и QThreadPool.
Есть смысл расписывать проблему?
>>737380
#17 #737333
>>737201
op us something ohuel
verse had not come up with
gashes ka roll
anonchik will be happy to let
>>737440
#18 #737380
>>737287
Всегда есть смысл расписать проблему. В овер9000 случаев сам поймёшь в чём она.
>>737383
#19 #737383
>>737380
Ну хорошо.
У меня есть клиент-серверное приложение (чатик).
У клиента есть сокет QTcpSocket
Сервер унаследован от QTcpServer, содержит массив объектов клиентов, в каждом объекте - свой сокет QTcpSocket.
Проблема в том, что если очень быстро отправлять сообщения с клиента - то они "зажевываются" на стороне клиента.
Например, отправил 10 сообщений быстро - прошли хорошо, 11е - зажевалось. То есть оно застряло где-то в очереди к обработке сокета (signal readyRead) на стороне клиента. Самое интересное - при отправке 12го сообщения, обрабатывается 11е, а 12е - зажевывается, соответственно. И так далее.
Вот, могу еще подробнее расписать, если кто-то с таким сталкивался
>>737393>>737438
#20 #737393
>>737383
110% проблема в твоём коде.
Кури свою логику при обработке данных. Вероятно, она делает что-то не то, когда получено сразу несколько сообщений.
Учитывая упоминание QThreadPool: внимательно кури порядок операций. Не может ли сложиться ситуация, что данные придут в тот момент, когда ты уже убедился, что их нет, но ещё не попросил систему уведомить тебя о поступлении новых.
>>737517
35 Кб, 600x800
#21 #737422
Господа, есть одно поле в классе, double типа, и оно не инициализируется в конструкторе, т.е может быть инициализировано а может и нет (Об этом говорит ещё один dirty-flag)

Прикол весь в том что в случае когда оно не инициализировано - я не могу вызвать дефолтный оператор присваивания этого класса , вылетает Floating Point Exception (Underflow error), именно присваивания, я не пытаюсь с этим мусором проводить арифметическую операцию. И что ещё характерно - это только в x86 билде вылетает, в x64 всё нормально.

Т.е в операторе присваивания крешится на месте this->doubleField = that.doubleField

Сталкивались с таким? Природа явления не ясна для меня.
#22 #737425
>>737422
ну так инициализируй его всегда и не мучайся
>>737426
#23 #737426
>>737425
Ну я так не могу делать по определённым причинам. Легаси код, всё такое.

Короче мне больше интересно почему ошибка возникает при присваивании, в моём понимании она должна произойти при попытке произвести какую-то арифметическую операцию.
>>737428
#24 #737428
>>737426
Посмотри на ассемблерный код. Может, оно его пытается загрузить в регистр сопроцессора зачем-то, и при этом вылезает ошибка.
#25 #737431
>>737422
Код покажи, что ли.
>>737465
#26 #737438
>>737383
Скинь исходники минимально воспроизводимого образца и объясни как воспроизвести.

Посмотрю.
>>737517
#27 #737440
>>737333
Имя славного поэта не напомнишь?
>>737563
400 Кб, 1920x1200
#28 #737446
начал изучать с++, сильно не пинать
Есть длинный список названий:
ООО Пики и Хуи
ОАО Пики точены
АОА Хуи дрочены
и тд.

Этот список можно запихать в массив из текстового файла - не подходит так как файл всегда открыт для правки.
Можно сразу в коде запихнуть в массив - тоже не удобно так как списков много разных больших и маленьких.
Так вот вопрос: можно ли этот список добавить к коду как дополнительный ресурс и уже из него брать необходимое?
Может криво объяснил, поправьте.
#29 #737450
>>737446
Я вообще нихуя не понял ни твоей проблемы, ни что ты хочешь сделать, но попробую выстрелить в небо: в чём проблема использовать вектор или любой другой динамический контейнер?
>>737453>>737463
#30 #737452
>>737446
Тебе в Qt - там есть ресурсы.
Будешь открывать свой файл как "qrc://zalupa.txt", а на деле он будет вкомпилен в твою прогу и никто его не отредактирует.
>>737454>>737463
#31 #737453
>>737450
Видимо, список СЛИШКОМ большой, чтобы использовать контейнер.
>>737446
Может глянуть в сторону БД, типа sqlite?
>>737457
#32 #737454
>>737452
видел это в qt, но как сделать в с++?
>>737456
#33 #737455
>>737446
Один из вариантов - сериализация.
#34 #737456
>>737454
А qt это java чтоле, блять? Охуеть вообще.
>>737458
#35 #737457
>>737453
не хотелось бы подключать базы
#36 #737458
>>737456

> это java чтоле


Питон, же.
>>737459
#37 #737459
>>737458
Это PyQt, обвязка поверх крестовых либ.
#38 #737463
>>737450
добавить текст как добавляют картинку/звук
типа как >>737452
#39 #737465
>>737431
Да я вангую что это на gcc не повторить.

Вот примерно такой код,
https://ideone.com/H0JsOQ

Таки не могу повторить, походу только на x86 Release билде, а дома у меня винды нет чтоб проверить.
>>737472
#40 #737467
>>737446
Если С++11, то можно его тупо заинклудить. Добавь в начале файла const char @str = R"(, а в конце )"; Если нет - то xxd и objcopy тебе в помощь.
>>737469
#41 #737469
>>737467
где об этом подробно прочесть?
>>737478
#42 #737472
>>737465
проверил в VS13 и VS15. Ничего не вылетает.
>>737487
34 Кб, 600x481
#43 #737476
>>737446
Попробую объяснить вот так:

string list[100501];
list[1] ="ООО Пики и Хуи";
list[2] ="ОАО Пики точены";
.
.
list[100500] ="АОА Хуи дрочены";

Есть вариант как это сделать проще?
>>737479
#45 #737479
>>737478
попробую разобрать, это можно применить к >>737476 ?
>>737482
#46 #737482
>>737479
Текст будет в отдельном файле, который вкомпилится в экзешник, обращение к нему через строковую константу. После запуска ты читаешь эту константу, разбиваешь на строки, пихаешь в массив.
Думаю, тебе проще скриптик написать, который читает текстовый файл и генерирует massiv.cpp, и запускать его через твою систему сборки.
>>737491
#47 #737487
>>737472
А ты Floating Point Exceptions вруби в студии.
>>737496
#48 #737491
>>737482
спасибо, буду ковырять
хотя ещё не понял как из файла в строковую запихнуть
>>737497
#49 #737496
>>737487
Всё ок.
#50 #737497
>>737491
QFile file("qrc://lalka.txt");
file.open(QIODevice::ReadOnly);
QStringList constants = file.readAll().split('\n');

Как то так
#51 #737517
>>737393
Капитан, вначале срабатывает сигнал о новом сообщении, только после этого я запихиваю его в тред.
>>737438
Ничего такого, делаю для себя. Держи, приложил скомпилированные экзешники, если кьют не стоит.
p.s. Я уверен, я много что сделал неправильно.
Алсо, я нашел интересный баг, что если сокет создать в тред пуле, то он отказывается работать напрочь. Поэтому пришлось коннектить клиенты в основном потоке.
http://rgho.st/88KXVZj6C
>>737524>>737693
16 Кб, 426x171
#52 #737524
>>737517
Это щютка? Мало того, что самый парашный формат архива, который только можно было найти - так еще я и ломать его должен?
>>737526
#53 #737526
>>737524
Это пидородефенс
Ты действительно пароль не знаешь, или просто шутишь?
>>737528
#54 #737528
>>737526
Эээ, единичку попробовал - не работает.
Я че - реально его угадывать должен?
>>737531
#55 #737531
>>737528
стандартный же, ну
>>737533
19 Кб, 426x207
#56 #737533
>>737531
Сука, ебись сам со своим говном.
>>737535>>737856
#57 #737535
>>737533
Ну прогугли тогда, как определяется стандартный пароль для различных форумов
>>737551>>737610
#58 #737551
>>737535
нахуй ты его вообще поставил, даун?

другой-анон
>>737856>>738643
#59 #737563
>>737440
Kohl Korutin?
>>737573
#60 #737573
>>737563
Верно, нужно приобрести сборник избранного.
#61 #737610
>>737535
Ехай Нахуй, дебил блядь!
#62 #737642
Доброго здравия.
Я тут за структуры хотел бы поинтересоваться.
Есть такая хуйня:
http://pastebin.com/5VVA65ic

33 и 34ая строка - уже сделал отдельную переменную, один хуй не понимаю в чем проблема.

Есть два вектора, которые держат две технически идентичные (но разные для восприятия) структуры.
Забиты в одном файле, если важно.

Выделяю под них место, получая инфу с базы.
Для первого - все проходит нормально - приходит значение "4", на "4" и расширяется.

Со вторым все идет через хуй пойми как. Он выбирает даты. Даты выбираются как обычно для qDate (daysTo) - значение "1" - все ок, capacity == 1
Но если значение больше 2 - начинается пиздец.

В функции и в конструкторе выводится "2" - он генерит "4"
В функции и в конструкторе выводится "32" - он генерит "41"

В чем беда - вообще хуй знает. Объявлены глобально в хедере, без указателей и переобъявлений - проверил.

Помимо resize пробовал еще reserve - та же ситуация

Куда еще можно копнуть? Кроме ассистанта
>>737645>>737677
#63 #737645
>>737642
Блять, а щас reserve заработал
да что ж за магия-то

Благодарю за уделенное время.

продам гараж, куплю тиски для выпрямления анальных рук
#64 #737677
>>737642
Ёбаная сука! Говномесный пидорас! Сдохни тварь! Сдохни и не пиши больше! Мои глаза, мои бедные глаза, зачем они видели ЭТО?!

Да, блядь, да. Ебай в assistant, сука, читай, блядь, что там пишут!

reserve - резервирует место, но не создаёт элементы.
rеsize - изменяет размер, т.е. и резервирует и создаёт. Может зарезервировать дохуя больше, чем ты просил. Потому что он, сука, умнее тебя и знает как выделяется память.
size - размер, т.е. количество созданных элементов
capacity - ёмкость, т.е. сколько памяти зарезервировано.
capacity >= size всегда!
>>737710
#65 #737693
>>737517
В твоём коде говна больше чем кода.
Я открыл один только сервер.цпп и уже в шоке.

Вот пара примеров:
ты делаешь waitForReadyRead с ТАЙМАУТОМ БЛЯДЬ! НО НЕ ПРОВЕРЯЕШЬ РЕЗУЛЬТАТ. А что если ничего не придёт и таймаут случится?
ты используешь QDataStream для чтения из сокета. А с чего ты взял, что там достаточно данных для того, чтобы эта операция не вызывала блокировок и читалала то что надо?
27 Кб, 250x161
#66 #737710
>>737677
Шпокойней-шпокойней.
Помимо таких профессионалов как ты есть и те, кому просто интересно поколупаться. И они таки могут совершать ошибки, особенно на первых порах.
Вспомни себя, к примеру.

Хотя о чем это я, ты же родился с клавиатурой в зубах, конпелятор у тебя в голове встроенный, с первого раза все делаешь без ошибок и вообще - не тупишь никогда по определению
>>737872
#67 #737732
кодить на крестах под линуксом в нетбинсе - совсем извращение или норм?
>>737733>>737773
#68 #737733
>>737732
Нетбинс то зачем?
#69 #737773
>>737732
Норм, только глаза от жабошрифтов вытекают. Я эклипсом пользовался, там нативная отрисовка, и возможностей не меньше.
#70 #737821
А почему лабы идут нахуй?
>>737869
#71 #737856
>>737551
>>737533
Сколько существ[ует/овал] Двач (да, тот самый), так каждый месяц набегают неофиты с этим дебильным вопросом.

Для них поясняю: это специальный IQ-фильтр, который проверяет умение пользоваться хотя бы одним из двух: Гуглом или собственным мозгом.
#72 #737869
>>737821
Потому, что мне в очередной раз придется объяснять шефу, что наша новая стажерка-программистка(!) с КРАСНЫМ, блядь, диплом технического ВУЗа не знает "как установить STL в IDE" и что надо было ее принимать на должность кассира или секретаря (только зачем нам третья секретутка в одном офисе).
#73 #737872
>>737710
Я был:
последовательней (куда браться за многопоточку, если в тривиальных вещах ошибки)
читал учебники и доки

Да-да доки. Там ангельским текстом для простых смертных заветы по использованию API написаны.

ПыСы.
Поколупаться - профанация, что есть грешно и караться должно без жалости.
Профаны вылезают на рынок и сбивают цену. Затрудняют работу. И подбирать людей и самому работу из-за них менять сложнее.
>>738049>>748039
47 Кб, 604x340
#74 #737937
Анончик, расскажи мудростей про float to string.

К тебе пришел после гугла, с его советов использую такую конструкцию:
#include <sstream>
float hp;
ostringstream hpOS;
for()
{
hpOS << hp;
//использую hpOS
hpOst.str("");
}

Терпимо стакается с utf8, с помощью такой мерзости как

>File.imbue(locale(locale(), new codecvt_utf8<wchar_t>()));


киррилица вперемешку с нужными данными исправно отправляется в файл (по крайней мере под виндой).

Вопросы:
1.многовато действий для преобразования, есть варианты проще?
2.как вывести один знак после запятой?
#75 #737940
>>737937

>1.многовато действий для преобразования, есть варианты проще?


QString::arg
>>737943
#76 #737943
>>737940
а через std?
>>737946
#77 #737946
>>737943
Страдать
>>738000
#78 #737948
>>737937
В C++11 UTF-8 поддерживается по умолчанию, может как-то копать туда?

>как вывести один знак после запятой?


http://www.cplusplus.com/reference/ios/ios_base/precision/
>>737976
#79 #737976
>>737948
С 10й студии на 13ю перешел только вчера, собственно потому и спрашиваю.

>precision


Оно задает общее количество знаков. Как лучше поступить вывода всего целого+1го после запятой?
>>738431
12 Кб, 299x287
#80 #738000
>>737946
STraDat'

В том же printf() так замечательно все форматируется..

Уже 30 минут ищу, блять.

В общем надо определить число целых разрядов, числа больше 10кк меня не интересуют, хотя в будущем может быть.

int rcount(int hp)
{
int digitHp = hp;
int _rcount = 1;
for (int i = 0; i<6; i++)
{
if (digitHp/10 >= 1) _rcount++;
digitHp = digitHp / 10;
}
return _rcount;
}

Теперь строка создается так:
hpOS << setprecision(rcount(hp)+1) << hp;

Какое-то говно, хотя бы работает нормально, но бля, задачка на другом языке в 10 раз быстрее бы решилась.
>>738034
#81 #738002
Может кто пояснить, про указатели в ассемблере?
Допустим есть строка Mas, состоящая из пяти однобайтовых символов.
Нужно заменить все символы, кроме латиницы на какой-то другой символ, допустим /
Вот просто для примера набросал код через указатель
И не совсем понимаю, почему он не работает без указателя, с обычным Mas[cx] я уже решил
http://pastebin.com/PfAzVFdf

Во-первых, если количество итераций и количество знаков без учёта служебного $ совпадает, он внезапно выдаёт мне на один знак больше, а потом ещё и пихает мусор, т.е. явно стирается последний служебний символ, хз по какой причине, ведь итерации всего 2.
Во-вторых, если хоть раз встретится не латиница, он будет заменять любые следующие символы на /.
>>738015
#82 #738015
>>738002

>из пяти однобайтовых символов



>mov word ptr [di], '/'

>>738068
#83 #738034
>>738000

>В том же printf() так замечательно все форматируется..


Так и используй его, нахуя тащить говно-iostream туда, где он только мешать будет?
>>738495
#84 #738049
>>737872

>последовательней


Каким бы ты последовательным не был, прочти тот спойлер, особенно строчку про "никогда не тупишь".

Учебники и доки читаю по мере необходимости использования того или иного функционала, но этот момент пропустил - не отрицаю этого. Объяснил - и на том спасибо.

>Вылезают на рынок



За всех не говори - лично я не вылезаю. У меня и так есть работа, не связанная с погромированием, пишу "в стол" (а точнее для того чтобы помочь себе самому, а не СТАРТАП ЛАЙФХАК МАНИ ХИПСТЕР АЙФОН
#85 #738054
>>737422
Может that.doubleField не инициализирован, и он ругается на него?
#86 #738068
>>738015
Ну 2 байта, не суть, там эти размеры нигде особо не играют роли, вроде как
>>738158
#87 #738141
Шапку читал, вопрос имею. Для практически полного нюфани кресты подходят как первый серьезный язык программирования? Какая лучшая книга есть на русском с задачами в конце каждой главы?
>>738164
88 Кб, 768x432
#88 #738158
>>738068
Как это не имеет значения?
Ты двигаешь указатель на один байт, а читаешь/пишешь слово. А еще эти слова пересекаются. А еще при записи слова в позицию последнего символа затирается ноль (ограничитель строки).

Короче, просто поправь на

>byte ptr


и не доказывай, что и "так должно работать".
>>738178
368 Кб, 2000x1086
#89 #738164
>>738141

>как первый серьезный язык программирования

>>738192>>738194
#90 #738178
>>738158
Бля, затупил, мне показалось, что массив однобайтный, потом посмотрел, показалось, что двухбайтный, написал решение для двухбайтного и в итоге он всё-таки был однобайтным.
#91 #738192
>>738164
Хуйня, вот нормальная картинка
http://rgho.st/7vpzp7r8w.view
#92 #738194
>>738164
ИТТ есть работающие в гейдеве? А программистами графики? Кто-нибудь вообще писал тут 3d или, хотя-бы, двухмерную визуализацию?
>>738205
#93 #738205
>>738194
Ну есть. Правда я джун.
>>738293
#94 #738287
int array1[10];

int main(){
int array[10];
cout << array1[9] << '\n';
cout << array[9];
}

Почему в array1 все элементы равны нулю, а в array они рандомны?
Понимаю, что array1 глобальный. Но в книге написано, что элементы массивов инициализируются по умолчанию (а для int это 0) вне зависимости от нахождения массива.
Поясните за это плокс
>>738291>>738293
#95 #738291
>>738287
Глобальные элементы и статики инициализируются в нули, а локальные нестатики содержат мусор, так и есть по стандарту.
Сам об этом узнал только недавно, благодаря тесту из шапки, хотя считал, что всегда должен быть мусор.
#96 #738293
>>738205
И много знать из области математики и геометрии нужно?
>>738287
Судя по всему, внутри функции массив только объявляется, то есть под него выделяется память, а вот вне идёт ещё и инициализация. Скорее всего какие-нибудь ебанутые технческие ограничения.
>>738320>>738454
#97 #738320
>>738293

>И много знать из области математики и геометрии нужно?


Вечно один и тот же вопрос. Загугли и скачай книгу math for game developers.
#98 #738431
>>737976

>на 13ю


>2016


>VS2015 Update 2 с Clang'ом и фичами из C++17


Ты ебанутый?
>>738452
#99 #738452
>>738431
Он на C с классами лабки пишет, ему можно.
#100 #738454
>>738293

>И много знать из области математики и геометрии нужно?


Для графики - линейка в объеме первого курса, но ее нужно очень хорошо понимать. Теормех-гидродинамика для физона.
>>738462
#101 #738462
>>738454

>Для графики - линейка в объеме первого курса


Полистал уже книжку, вижу, правду говоришь.

>но ее нужно очень хорошо понимать


С пониманием у меня проблем почти никогда не возникает. Понимать-то я её понимал, весьма простая штука, но вот если бы в институте оценки за понимание ставили.

>Теормех-гидродинамика для физона.


А вот это может стать серьёзным препятствием.
>>738475>>738674
#102 #738473
Поясните кто нибудь за именование методов классов.

Чому во всех нотациях их называют начиная с m_ или заканчиваю подчёркиванием? Чому нельзя в конструкторе через this как в яве инициализировать и не издеваться над глазами?
#103 #738475
>>738462
Написал много, но в последний момент стёр.
Просто делай игры и все придет само.
#104 #738476
>>738473
Где это в яве методы инициализируются через this?
#105 #738478
>>738473
m_ - member

>Чому нельзя в конструкторе через this как в яве инициализировать и не издеваться над глазами?


Тебе кто-то запрещает и пиздит тебя палкой, если ты это сделаешь?
>>738483>>738530
#106 #738483
>>738478

>Тебе кто-то запрещает и пиздит тебя палкой, если ты это сделаешь?


Именно это и сделают если закоммичу куда нибудь или в команде с устоявшимся кодстайлом буду писать "отсебятину".
>>738782
#107 #738495
>>738034
нужно рисовать текст, а не выводить в сосноль.
#108 #738530
>>738478

>m_ - member


Tudod mit jelent ez?
#109 #738643
>>737551
Пароль должен стоять не на архиве, а на скачивание. Чтобы скачивали только двачеры и мимокроки не портили счетчик скачиваний.
#110 #738674
>>738462

>А вот это может стать серьёзным препятствием


Да не станет, не парься. Там все просто. Когда конкретные вещи делать начнешь - сразу станет ясно какие знание нужны, нагуглишь и выучишь.
#111 #738685
>>738473

>Чому нельзя в конструкторе через this как в яве инициализировать и не издеваться над глазами?


Можно, но тогда тебе придется геттеры называть getHuita, как в джаве, что гораздо заебнее.
62 Кб, 787x1049
#112 #738701
ФОТОШОП МАСТЕР 80 ЛВЛ ВРЫВАЕТСЯ В ЭТОТ ИТТ ТРЕД
>>738807
#113 #738782
>>738483
Сорта говна. Использую тот стиль, что в коде вокруг и мне глубоко похуй на него.
#114 #738807
>>738701
Сборник стихов сделай.
>>738813
#115 #738813
>>738807
Какой сборник? Всё на архиаче.
>>742137
#116 #739169
Почаны.
Я ньюфаг (иду нахуй).
Я хочу чтобы мое приложение дебаг мессаджи показывало в отдельной консоли (в нескольких отдельных для разных вещей).
Я понимаю, что мне нужно из родительского приложения запускать процессы консолей, но ума не приложу как организовать между ними обмен данных.
Хочется чтобы в родительском приложении был интерфейс типа
void OpenConsole( enum target );
void MakeEntry( enum target, char* message );
то есть никаких наворотов. Таргет это целевая консоль, их ограниченный список.
Как мне в процессе с таргет консолью принимать эти мессаджи из родительского?
Напоминаю: я ньюфаг и хуй.
>>739175>>745997
#117 #739175
>>739169
Винда или Unix-like?
>>739180
#118 #739180
>>739175
Винда.
>>739185
#119 #739185
>>739180
Тогда кури WinAPI, иначе можно было бы наверное использовать файлы-дырки.
#121 #739600
вот вы тут плачете что работы на плюсах нет, а мы не можем трех блядь миддлов в Амстердаме и еще трех в другом европейском городе найти.

никто не хочет в Европе работать?
>>739604>>739613
#122 #739604
>>739600

>миддлов в Амстердаме


Эй, вы там совсем уже от дудки никакие штоле, укурки ебаные?
#123 #739613
>>739600
линк на вакансию
#124 #739628
>>739613
никуда не уходи, скину линк через час
#125 #739638
>>739613
Окей.
#126 #739639
>>739613
https://goo.gl/zhgTTh
там найдешь как остальные вакансии посмотреть
>>739649>>739650
#127 #739649
>>739639
Расскажи, что реально вы хотите увидеть в кандидате. Я уже не раз сталкивался, что по описанию я 100% подхожу, а когда дело доходит до приглашения на интервью, то "ой, а у вас еще <то, чего не было в вакансии> нет" или "ой а у вас слишком специфический опыт".

Еще мне интересен требуемый уровень английского. У меня он не fluent, но говорить могу.
>>739653
#128 #739650
>>739639
1.5+ года в С++, оверолл 6+ в айти(суровый саппорт). Жил\работал в Швеции пару месяцев, теперь хочу в Европку на ПМЖ, английский свободный разговорный. По уровню сказал бы, что между джуном и мидлом, не долбоеб. Есть шансы?
>>739654
#129 #739653
>>739649
знание плюсов: от низкоуровнего кода до метапрограммирования. gtest/gmock. Linux environment.
English upper mediate и выше. придется много общаться с голландцами и немцами.
>>739700
#130 #739654
>>739650
я тимлид а не эйчар. попробуй. дойдешь до тех собеседования, узнаешь
>>739660
#131 #739660
>>739654
ну а чо, ебну завтра резюме им.
>>739663
1941 Кб, Webm
#132 #739662
Есть 2 массива:

int array[10];
int array1=array;

Почему begin() и end(), также как и range for использовать с array можно, а с array1 нет? Ведь array это же тоже int
.
И где прочитать про то, почему именно так продизайнили, не как, а именно почему, с какой целью. В стандарте это есть?
>>739678>>741204
#133 #739663
>>739660
не забудь потом про меня рассказать. я хоть бонус получу
>>739666
#134 #739666
>>739663
"Мне ананас с двачей посоветовал вакансию"? Или что им сказать?
>>739668>>739670
#135 #739668
>>739666
уххх какой трипл. Не, я офк скажу, рефбонусы дело полезное
#136 #739670
>>739666
напиши сюда 2a2{sQ4d218ANUSWIXopayqPUNCTUMc\6hom т резюме приложи. там все обсудим
>>739673>>739679
#137 #739673
>>739670
Бля, так на сайте отсылать резюме или тебе?
>>739674>>739686
#138 #739674
>>739673
сначала мне. я с тобой побщаюсь, потом к эйчарам пойдем
#139 #739678
>>739662
Потому что array это массив, для него известна длина и компилятор может сгенерировать end() для него. array1 это просто указатель. Неизвестно даже указывает он вообще именно на буфер или просто на одно значение. И не известен размер буфера - следовательно невозможно сгенерировть end().
>>739690>>741204
#140 #739679
>>739670
ща отошлю. 739650 и 739666-кун.
739668 - эт не я.
#141 #739686
>>739673
Отправил + добавил ссылку на пост с метахуйней в позапрошлом треде.
>>739688
#142 #739688
>>739686
получил. в течении суток отпишу.
>>739693>>739694
#143 #739690
>>739678
Спасибо за ответ.
Но array ведь тоже преобразовывается в "просто указатель". Или компилятор помечает этот указатель каким-то образом , видя [10] (я чую опять неочевидную хуйню)?
>>739733
#144 #739693
>>739688
и я тебе отправил, 739650-кун
>>739697
#145 #739694
>>739688
ты сам принимаешь решение? Вроде тимлид, а вроде и бонус какой-то ждешь за инвайт.
>>739696
#146 #739696
>>739694
рефервл бонус дают тому, кто привел нового сотрудника.
просто вполне возможно что я буду тех собеседование проводить. и мое решение будет влиять на результат.
#147 #739697
>>739693
ананасик, зачем данные спрятал. кому я спам слать буду?
резюме сильное, мне нравится
>>739702>>739708
#148 #739700
>>739653
забыл указать. c++03. энжой аур легаси. раньше 2018 новый стандарт не можем использовать
>>739704
#149 #739702
>>739697
мне просто нравится слово ананасик
>>739703
#150 #739703
>>739702
в течении суток отпишу. голосом не боишься общаться?
>>739706
#151 #739704
>>739700
фу бля. А чего так? У вас же linux environment. Проприетарный компилятор юзаете?
>>739709
#152 #739706
>>739703
Без проблем могу, что по-английски, что по-русски.
>>739713
#153 #739708
>>739697
рейт второе резюме
>>739710
#154 #739709
>>739704
сдк. есть очень крупный кастомер с vs2008. чтоб он разорился, сука
#155 #739710
>>739708
красивое, опыт с железом. есть под такое пару вакансий
>>739717
#156 #739713
>>739706
шведский ананас, ты сейчас где живешь? дома или в Швеции?
>>739719
#157 #739717
>>739710
у меня нет опыта с железом. Это статический анализ железнячих проектов. Там был отдельная команда hardware-разработчиков, которые объясняли software-dev'ам, что какие фичи нужно пилить.
#158 #739719
>>739713
в Москве я в данный момент. Пообщаться в рабочее время по МСК - легко.
>>739723
#159 #739723
>>739719
у меня CET+1, разница небольшая.
#160 #739729
Ну может вы мне тогда скажите, какого хуя VS15 не видит WNDCLASS? VS10 видит, а эта сука нет. Выебывается еще, в WinUser.h кидает объявление в неактивный блок неактивный блок препроцессора!
>>739735
#161 #739733
>>739690
Не помечает (array обычный указатель), но размер известен и он может использоваться когда нужно (например для выделения памяти под массив).
#162 #739735
>>739729
Я кажись понял. VS15 совсем разучился работать со статическими библиотеками.
#163 #739743
Чет не конпелируется:
http://ideone.com/BJRRw4
>>739748
#164 #739748
>>739743
Что тебя удивляет? У тебя рекурсивное определение без остановки. Юзай enable_if
#165 #739766
Привет илитарии, нужена ваша помощь. Сам ниразу не программист, просто интересно программирование и пилю прогу для себя.

По делу.
Есть словарь примерного вида - 2 байта - номер параметра, 2 байта - длина байт значения этого параметра в бд, 1 байт - тип данных в бд(параметр может быть записан как long, float, int, char[n]), 20 байт - название.
Всего 200 параметров.

Теперь по базе данных.
Первые 15 байт одинаковая информация для каждой строки (длина этой строки в байтах, ключевой параметр и пр.), далее следует анал-карнавал - 1 байт номер параметра в справочнике, потом длина байт для значения по справочнику и так идет до конца строки, затем опять новая строка, где первые 15 байт практически идентичны 15 байтам предидущей строки, дальше снова идут параметры в таком же виде. Всего в строке может быть от 1 до 200 параметров. Количество строк с параметрами не ограничено.
Проблема возникла со считыванием данных. Конечно, можно создать структуру со всеми 200 параметрами и просто заполнять в нее каждую строку и закидывать эти структуры в массив, но жалко тратить память на неиспользуемые параметры. Массив ассоциативных массивов создавать тоже не вариант, параметры в строках разного типа.
#166 #739785
>>739766
boost::any
#167 #739802
>>739766

> Массив ассоциативных массивов создавать тоже не вариант, параметры в строках разного типа


Это самый норм вариант, если я правильно тебя понял. Тебе нужно создать класс Параметр и хранить в ассоциативном массиве его. А от этого класса уже отнаследовать все возможные типы.
>>739816
#168 #739816
>>739802
Это плохая архитектура, потому что когда ты пытаешься делать доступ по интерфейсу к разнотипным объектам, остается только пересечение. Лучше сделать, чтобы метод ему возвращал что-то типа maybe, ну или бросал исключение, если элементы отсутствуют совсем редко.
#169 #739944
int array[2][3];
for (int (&i)[3] : array){
for (auto j : i)
cout << j << " ";
cout << std::endl;
}

Почему на месте "int (&i)[3]" если просто поставить "auto i", то ошибка?
>>739952
#170 #739945
>>739766
tagged union
#171 #739946
ясно понятно

int array[2][3];
for (int (&i)[3] : array){
for (auto j : i)
cout << j << " ";
cout << std::endl;
}
>>739952
#172 #739951
Парни, почему если класс имеет объект как член, то его инициализация происходит перед вызовом конструктора класса-хозяина?
>>739952>>739953
#173 #739952
>>739946
>>739944
auto &i : array

>>739951
По стандарту. Ну и как-то логично, что в конструкторе все элементы класса уже должны быть инициализированы, иначе с чем ты работать будешь.
>>739995
#174 #739953
>>739951
Чтобы в конструкторе класса хозяина с ним можно было работать.
#175 #739995
>>739952
А с виртуальным базовым классом?
>>740020>>740755
#176 #740020
>>739995
Что с виртуальным базовым классом? Сформулируй полный вопрос, а не обрывок.
>>740023
#177 #740023
>>740020

>Что с виртуальным базовым классом?


А что с ним?
488 Кб, 1920x1083
#178 #740077
>>739256
Ох спасибо, стало лучше.

sprintf пока пристроил на примере:

float hp = 289.6965416518;
char buf[128];
sprintf(buf, "%.1f", hp);
string sHp = buf;
life_bar_tooltip.setString("hp:" + sHp);

Вроде 3 действия, но char buf можно оставить в глобале и забыть.

Попытался впилить тоже самое через to_string:
float hp = 289.6965416518;
int precision = 10;
float dhp = floor(huita * precision + .5) / precision;
string sHp = to_string(hp);
life_bar_tooltip.setString("hp:" + sHp);

Минимум 3 действия. Ибо в sHp сохраняются на конце нули, тянущиеся после округления. Не найду как избавиться без костылей. Даже если получится, возможно что это будет проще, чем вариант с массивом символов?
>>740085
sage #179 #740085
>>740077
/float dhp = floor(hp * precision + .5) / precision;
/string sHp = to_string(dhp);
5утра
#180 #740511
Посоветуйте, что почитать про сетевое программирование и межпроцессное взаимодействие?
>>740729
#181 #740536
Анон, впервые заглянул в cpp тред. Господи, какой же охуенный оп-пост, 10 из 10!
#182 #740576
До чего же ваши кресты медленная пораша.
Посмотрите только сколько ассемблерных действий происходит во время выделения памяти под указатель:
x = new int;
И вы еще при этом утверждаете, что оптимизирующие компиляторы все сами сделают, что кресты быстрый язык, пидоры.
>>740578
#183 #740578
>>740576

>Посмотрите только сколько ассемблерных действий происходит во время выделения памяти под указатель


4 действия.
>>740583
#184 #740583
>>740578
Батя, ну ты че. Дай потроллить немного.
sage #185 #740584
>>736493 (OP)

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


Действительно, кошмарный язык для пердоленья, а не программирования.
>>740682>>741079
37 Кб, 604x453
#186 #740682
#187 #740729
>>740511
гугл, шапку
#188 #740755
>>739995
Ну, он как бэ интерфейс. У него нечего инициализировать))0))
#189 #741079
>>740584
Так других-то нет.
>>741081
#190 #741081
>>741079
Есть руст. Без траллинга.
>>741082
#191 #741082
>>741081
Лет через 10 может и будет. Сейчас там ни либ, ни тулзов, ни кроссплатформенности.
>>741084
#192 #741084
>>741082

>кроссплатформенности


Поддерживает всё, под что работает (и будет работать) бэкэнд LLVM. Хотя учитывая что плюсы используют только на десктопе и серверах – всё что уже нужно.
С остальным – ну в принципе да, хотя 2/3 плюсовых тулзов там вообще не нужно.
>>741092
#193 #741085
#194 #741092
>>741084

>Хотя учитывая что плюсы используют только на десктопе и серверах


Ты забыл про микроконтроллеры и мобилки как минимум.
>>741094
#195 #741094
>>741092
В микроконтроллерах – нет. Мобилки – ок, хотя LLVM на арм вполне себе компилируется.
>>741097
#196 #741097
>>741094

>В микроконтроллерах – нет


Давно уже да, особенно на 32-битных. В любом случае, с крестами пердолится надо в разы меньше, чтобы что-то собрать под нужную платформу.
>>741099>>741153
#197 #741099
>>741097
Когда я с ними сталкивался успел запомить разве что свежий запах самописных сишных компиляторов, с которыми половину приходилось писать на асме – пердолинга было меньше.
Сейчас-то что нибудь изменилось? Прям где-то нормальная поддержка плюсов а не си с классами?
>>741151
#198 #741151
>>741099

>свежий запах самописных сишных компиляторов


Gcc есть сейчас почти для всего. Для остального плюсы и не нужны.

>нормальная поддержка плюсов


Стандартной библиотеки часто нет.
#199 #741153
>>741097
В чем преимущество С++ над С в рамках микроконтроллеров?
>>741158
#200 #741158
>>741153
Деструкторы, темплейты, оверлоад функций и операторов, неймспейсы. Сейчас еще и лямбды.
#201 #741204
>>739662
У них разные типы. У array тип int[10], а у array1 тип int*.
Во второй строчке происходит неявное преобразование.
Для первого типа begin() и end() определены, для второго -- нет. Почему -- тут >>739678 уже расписали.
Поясните плиз #202 #741387
Какие аналоги PEP8 есть для крестов? Есть какие-нибудь плагины для пердолинга индентации в визуал студии?
>>741397>>741608
#203 #741397
>>741387

>Какие аналоги PEP8 есть для крестов?


Была дока от гугла, есть гнушный, есть не гнушный.
http://geosoft.no/development/cppstyle.html
http://www.possibility.com/Cpp/CppCodingStandard.html
и т.д. и т.п.

>Есть какие-нибудь плагины для пердолинга индентации в визуал студии?


А чего в ванильной не хватает?
#204 #741608
#205 #741815
https://ideone.com/IspL0t
В 6ой строке в ретурне временный объект не создаётся?
>>741824>>741837
#206 #741824
>>741815
С чего ему там создаваться?
>>741829
#207 #741829
>>741824
Разыменовывать указатель, но его значение никуда не записывается, а в ссылку кастится.
#208 #741837
>>741815
A - это не массив функций, ты завалил задание.
Превзойти мое решение через темплейты никому не удастся
>>741846
#209 #741846
>>741837
че за решение?
>>741847>>741857
#210 #741847
#211 #741857
Вопрос от нуба #212 #742026
Почему наследник приводится к базовому классу неявно, а базовый класс к наследнику - явно? Ведь наследник как бы содержит в себе базовый класс и по идее приведение базового класса к наследнику должно быть неявным. И вообще дайте подробности про приведения. Спасибо.
>>742071>>742167
#213 #742047
Почему число символов имеет свой отделтный тип?
>>742071
#214 #742071
>>742026
Ну смотри, есть у тебя два класса
class A {
public:
--
}

class B: public A {
public:
-
-
protected:
int lolka;
}

Если ты приведешь A к B, то в A::lolka у тебя будет мусор, а если попытаешься чему-нибудь присвоить, то вообще можешь затереть чью-то память или что-то сломать. По-моему, приводить базовый к наследнику это вообще вандализм и неправильно, так не должно быть никогда.

>И вообще дайте подробности про приведения.


Что именно тебе о них хочется узнать? Неужели мало инфы?

>>742047
Ты о size_t или о чем?
>>742080>>742149
#215 #742080
>>742071
Жа, о нем
>>742097>>742103
#216 #742097
>>742080
size_t используется не только для количества символов, а для количества любых данных, и еще он возвращается sizeof.
#217 #742103
>>742080
Размер size_t на каждой конкретной системе подобран таким образом что он заведомо больше размеров любого буфера памяти который возможно выделить на этой системе. Тоесть храня смещения в памяти с помощью size_t ты никогда не получишь переполнения, его всегда хватит. Что для других типов не гарантируется.
#218 #742137
>>738813
Обложку Кохл Корутин - Избранное.
#219 #742149
>>742071

> Если ты приведешь A к B, то в A::lolka у тебя будет мусор


Т.е. при приведении память для А как-то перевыделится? Интересует как оно внутри устроено
#220 #742165
>>742149
Нет, просто память по адресу А будет использоваться как для типа B, при том что выделена под А.
Короче, это как напялить обувь другого размера. Вроде сидит, но либо болтается, либо жмёт.
>>742192
#221 #742167
>>742026
Из-за множественного наследования. Смещение от наследника к родителю всегда известно, а в другую сторону оно может быть какое угодно.
#222 #742173
>>742149
Нихуя не перевыделится. До каста будет считаться что объект лежит в 16 (к примеру) байтах. После каста будет считаться что объект лежит в 16 плюс следующие 32 (к примеру) байта. А так как те 32 байта от левой хуйни то ничего хорошего из этого не получится.
>>742192
#223 #742174
>>742149
Ничего не перевыделяется, просто указатель после преобразования смещается на некоторое количество байт.
Например, если есть struct A : B, C {}, то в памяти будут расположены сначала поля B, потом C, потом то, что добавляет А. Если тебе нужно скастовать A в C, то указатель будет считаться как указатель на А плюс размер В.
>>742192
76 Кб, 227x227
#224 #742189
Планирую начать изучать С++ уже который раз с сегодняшнего дня.
>>742197
#225 #742192
>>742165
>>742173
Спасибо, теперь понятно, просто я немного идиот.
>>742174
Получается неявно и A к В или С не приведется? Или неправильно приведется? P.S. от копма далеко не проверю.
>>742221>>742223
#226 #742197
>>742189
Начни с понедельника
>>742323
#227 #742221
>>742192

>Получается неявно и A к В или С не приведется?


Приведется - смещение от А к родителям компилятору всегда известно.
#228 #742223
>>742192

>Или неправильно приведется?


static_cast всегда будет правильным. С-каст будет правильным только для А к В, поскольку у них смещение нулевое.
>>742237
#229 #742237
>>742223
Хм, тогда как вообще адресация по членам класса происходит? Если с помощью смещения, то проблемы приведения базового к дочернему тоже нет. У дочернего сначала идут поля базового класса, потом свои. При обращении к полям базового они будут в начале все ок, а при обращении к не существующим - ошибка, такая же как и при обращении из базового к дочерним.
>>742288
#230 #742264
Есть тут кто может помочь полному нубу?
>>742271
#231 #742271
>>742264
Ты сначала говори что надо
>>742272
#232 #742272
>>742271
1. Для чего нужен .NET Framework, и какую версию его лучше юзать? У меня по дефолту стоит 4.5.2, но там есть 4.6.0.
2. Я по вашему совету скачал Вижуал Студию, сделал в ней хеллоу ворлд, а он не запускается. Вернее, запускается какое-то окно на 0.1 секунды. Что я не так делаю?
>>742273
#233 #742273
>>742272
1. .NET фреймворк нужен для C#, а не для C++ ты ведь не собрался писать на C++/CLI
2. добавь system("PAUSE"); перед return 0;
>>742278>>742333
28 Кб, 939x408
#234 #742278
>>742273
Ага, спасибо.

>NET фреймворк нужен для C#, а не для C++


Когда я пытаюсь создать С++ файл, пикрил.
>>742285>>742286
#235 #742285
>>742278
Тебе нужен не пустой проект, а консольное приложение.
>>742346
sage #236 #742286
>>742278
Там сделоли чтобы по дефолту даже C++ конпелировал под дотнет. Пердоль настройкию
#237 #742288
>>742237
При множественном наследовании может быть, например A -> B, A -> C, D -> B, C. Как ты тут будешь приводить A к D?
>>742291
#238 #742291
>>742288
D -> (B,C)
fix для понятности
>>742316
#239 #742308
Народ! Может есть у кого написанные set/map/queue шаблонные, работающие с stl.
Умоляю помогите!
>>742311>>742322
#240 #742311
>>742308
тебе зачем?
#241 #742316
>>742291
Я не знаю как в памяти хранится. Я бы хранил так сначал A, потом все что от B (без А), потом все что от С (без А). А в начале смещение не нужно все ок. Если приводить B к D, то опять все ок со смещением (AB все по порядку и в B и D), а вот с приведением С к D наверное были бы проблемы. Но я думаю так сделали не только из-за этого, наверное будут какие-то проблемы с вызовом методов, просто я тупой и не могу понять какие.
>>742324
#242 #742322
>>742308
Открываешь свою любимую IDE, подключаешь хэдер set/map/queue, создаешь переменную нужного типа, тыкаешь правой кнопкой мыши по ее типу и выбираешь что-то вроде "перейти к определению".
#243 #742323
>>742197
Лучше пусть начнет сразу, как новый стандарт выйдет, чего переучиваться-то.
>>742326
#244 #742324
>>742316
ЗЫ static_cast же правильно приводит при множественном наследовании, значит теоретически можно сделать и правильно приведение C к D
>>742426
#245 #742326
>>742323
А ты что-то в этом понимаешь.
#246 #742333
>>742273

>добавь system("PAUSE"); перед return 0


Вот за такое в любом приличном месте пиздят клавиатурой по еблу. Студия дала вам настройку подсистемы, установи SUBSYSTEM:Console! Не хочу, хочу писать костыли. Небось еще локаль выставляешь каждый раз изнутри кода?
>>742338>>742445
#247 #742338
>>742333
Слушай, для новичка дописать одну строчку явно проще, чем лазить в настройках IDE и чего-то там ковырять для того, чтобы консолька не закрывалась при завершении программы.

А клавиатурой по еблу пиздят чаще тех, кто в приличных местах выебывается вместо того, чтобы вежливо посоветовать более оптимальное решение.
>>742349>>742445
#248 #742346
>>742285
А в чём их разница? Я всегда думал что пустой лучше.
>>742349>>742445
sage #249 #742349
>>742346
Ммм, да ни в чем. Я в 2008 студии тоже делал "пустые проекты", когда говнокодил олимпиадки.
>>742338
#include <conio.h>
...
getch()

и нахуя приучать людей к system()? это ж вообще дерьмо ебаное, вон в imagick'е из-за этой хуйни дырищу какую нашли
#250 #742356
>>742349
А сейчас ты работаешь С++ мастером?
Начинал с 0? Есть дельные советы?
>>742445
#251 #742387
Начал учить C++ неделю назад, а уже люто-бешено ненавижу эту порашу. Степанов-шаблоны, классы-хуясы. Ну и дерьмо.
>>742390>>742445
#252 #742389
>>742349
#include <stdio.h> // или cstdio
...
getchar();

Кроссплатформенный вариант, чо.
>>742442
#253 #742390
>>742387
Шаблоны у Александреску ад. А я вот вдуплить с приведением не могу :(
>>742445
#254 #742426
>>742324
Вот, нашел как все это хранится https://habrahabr.ru/company/pvs-studio/blog/186682/
sage #255 #742442
>>742389
Давно не писал на сишко и крестопараше, но мой шиндовариант привлекал тем, что можно было PRESS ANY KEY TO CONTINUE, а в твоем обязательно жмякать ентер. Не знаю почему, меня это раздражало.
>>742445
#256 #742445
>>742333
>>742338
>>742346
>>742349
>>742356
>>742387
>>742390
>>742442
Собрались куча даунов и устроили оргию неграмотности. Идите нахуй отсюда.
>>742448
sage #257 #742448
>>742445
В рот ебал тебя и твои ебучие кресты. Самый конченый язык эвар.
>>742449
#258 #742449
>>742448
Почему? Я только его изучать начал, слышал что это отличный язык.
Какой лучше?
#259 #742458
>>742456
А чем он плох-то?
Я думал писать программы и игры.
>>742471
#260 #742471

>>742467


>Если у тебя есть конкретные цели и задачи - забей вообще и пиши на самом подходящем инструменте


Ну у меня есть цели:
>>742458

>писать программы и игры


А на счёт инструмента я не определился.
>>742475
sage #261 #742475
>>742471
Для тебя самый лучший путь - выбрать наиболее популярный инструмент для решения твоих задач, к которому полно документации, "живых" библиотек, активное сообщество.

>писать программы и игры


Какие программы и игры? Что-нибудь совсем незамысловатое можно и на том же пистоне наваять.
>>742477
#262 #742477
>>742475
А сложное? Например, физику?
>>742481
sage #263 #742481
>>742477
Опять же, смотри популярные инструменты, движки, на чем они написаны, я не силен в геймдеве.
>>742484
#264 #742484
>>742481
А программы?
А в чём силён?
>>742499
#265 #742488
>>736493 (OP)
Реквестирую хорошую статейку по тэмплэйтам в крестах.
>>742490>>742498
#266 #742490
>>742488
Хорошие (читай - с широки м охватом материала) про них только талмуды Степанова и Александерску.
#267 #742491
>>742490
От Александреску есть нормальный язык с нормальными темплейтами.
>>742494>>742497
#268 #742494
>>742491
>>742490
Спасибо, попробую Александреску.
#269 #742497
>>742494
Он >>742491 тебе не про плюсы если что говорил, лол.
#270 #742498
>>742490

>Степанова и Александерску


Ну вот зачем ты его дезинформируешь-то? У Степанова вообще все книжки про теорию CS, всякие там преобразования орбит, а про STL у него только старые статьи, да и те написаны до фактической стандартизации шаблонов. У Александреску шаблоны - средство, а не цель, а книга про проектирование.
>>742494
>>742488
Если тебе интересны непосредственно шаблоны как механизм, а не их приложения (обобщенность, метапрограммирование), то юзай Вандевурда-Джоссатиса из шапки.
sage #271 #742499
>>742484
Ой всё.
Считай, что я ничего не умею и меня не было в этом треде, меня забанили.
#272 #742512
>>742494
Не пробуй Александреску, ты либо сломаешь мозг и начнешь писать теплейтами как он, либо просто продолжишь пользоваться ими как все нормальные люди.
>>742514>>742520
#273 #742514
>>742512

>либо просто продолжишь пользоваться ими как все нормальные люди.


Все нормальные люди избегают этой параши как только могут.

Нормальные темплейты есть только в дишечке. Которую пилит Александреску, ага.
>>742517
#274 #742517
>>742514
Темплейты задумывались не для того как их использует Александреску, а ди вообще язык без задач
>>742544
#275 #742520
>>742512

Н Е О С И Л Я Т О Р
Е
О
С
И
Л
Я
Т
О
Р
>>742524
#276 #742524
>>742520
Просто я не видел ниодного реального проекта или задачи, где нужно было извращаться с метапрограммированием. Как только я увижу что для какой-то задачи метапрограммированние на шаблонах лучше чем что-то еще, я изменю свое мнение. Но скорее всего для этой задачи я просто возьму какой-нибудь другой язык
>>742541
#277 #742541
>>742524
Самый такой элементарный пример. Процентов 50 кода, который ты пишешь каждый день - всякие конструкторы, инициализаторы, копирование, перегруженные операторы, проверки инвариантов, гарантии безопасности исключений, виртуальность деструктора, синглтоновость etc, можно написать один раз и вынести в стратегии. Сразу долой огромное количество ошибок и потенциальных выстрелов в ногу из-за того, что ты забыл что-то явно указать. Просто наследуешься от нужных стратегий и пишешь только код по существу.
>>742546
#278 #742544
>>742517
Задача ди - сделать кресты с нормальной библиотекой и без выстрелов в ногу и костылей.
#279 #742546
>>742541
50% кода который я пишу каждый день это не конструкторы и т.д. что ты там написал. Я не создаю классы половину своего рабочего времени, максимум 2 раза в месяц для какой-то новой функциональности наследуюсь и переопределяю методы. Я честно не помню когда что-либо приходилось писать прям с нуля.
>>742554
#280 #742547
>>742544
А как же стать популярней крестов? Зачем нужен язык которым никто не пользуется?
>>742549
#281 #742549
>>742547
Тебе яп задачу решать, или дрочить на тех, кто пользуется?
>>742555
#282 #742550
>>742544
На мой взгляд, единственной меркой качества языка является его успешность. Если D не выстрелил, значит, с ним что-то не так. Можно сколько угодно кукарекать про тонны крестового легаси и отсутствие пиара, но факт остается фактом - если язык не используется, то идиотизмом будет вкатываться в него всерьез. Мы тут не шутки шутим, надо работать, а не заниматься бета-тестированием для веселых румынов, обивая пороги на SO в поисках ответов на элементарные вопросы.
>>742553>>742562
#283 #742553
>>742550

>обивая пороги на SO в поисках ответов на элементарные вопросы.


А в крестах не обиваешь, лол?

>будет вкатываться в него всерьез


Это не кресты. В него "вкатиться всерьез" можно за неделю, бо не нужно заучивать поведение говна и выстрелов в ногу и механизмы костылей. Он просто работает.
>>742564
#284 #742554
>>742546
Понимаю, поэтому я и не говорю об универсальности. Зачастую ты берешь либы/фреймворки и пишешь просто логику, опираясь на их структуру. Но когда ты сам пишешь либу/фреймворк или занимаешься непосредственно проектированием кода, то полезность шаблонов трудно переоценить.
>>742563
#285 #742555
>>742549
Объясняю как обстоит дело на рынке. Ты либо приходишь в проект, либо начинаешь проект. Приходишь ты в проект на язык который знаешь, этот вариант рассматривать не будем. Начинаешь ты проект на любом языке и к тебе идут люди со знанием этого языка. А теперь ответь сколько людей знают Д? А яву? А кресты?
>>742559
#286 #742556
Здравствуй, Маленький Принц. Представим, что твоему барашку стало одиноко. И ты попросил нарисовать ему друзей. Ты выделил для барашков целую планету (точнее, астероид) по соседству. Эта планета — доступная память. Вся она уставлена коробочками, в которых будут жить барашки. Чтобы не запутаться, все коробочки пронумерованы. Коробочки — это ячейки памяти. Барашек в коробочке — это данные. Допустим, что попался какой-то особо упитанный барашек. Ему понадобится две коробочки. Или даже больше. Барашек — неделимая структура (для нас с тобой, Маленький Принц, это точно так), а коробочки идут подряд. Нет ничего проще. Мы вынимает стенки между двумя рядом стоящими коробочками и кладем туда барашка. Места в коробочке не очень много. И барашек не может свободно развернуться. Поэтому мы всегда знаем, где его голова, а где хвост. И если нам что-то нужно будет сказать барашку, мы обратимся к той коробочке, где у него голова.
>>742561
#287 #742559
>>742555
А сколько нужно людей, чтобы писать на яве или крестах? А читаемость кода?

А если смотреть, за сколько времени он учится - то тут он на пару порядков уделает кресты с жабой. Собсно это и есть помесь крестов и жабы минус стрельба по ногам.
>>742580>>742581
#288 #742560
Анончики, не могу справиться с элементарным алгортимом. Задача типа ХЕШИРОВАНИЯ:
Есть эта самая таблица (вектор структур), которую я считываю из файла, имеющего размер size. Считывая из файла с помощью функции получаю ключ (номер элемента массива), моя задача забить этот массив линейно, с определенным шагом. Т.е. если ячейка массива уже занята - двигаюсь дальше на шаг и так до конца. Когда дохожу до конца - начинаю искать место сначала и до этой ячейки. Последовательность действий:
Разбил ее на две функции. Первая
1. Проверяю вектор на заполненность, если пустых ячеек нет - делаю resize на step
2. Проверяю размер ключа, если он больше, либо равен размеру вектора - присваиваю ключу ноль
3. Вызываю основную функцию заполнения вектора, передавая в нее ключ, данные и размер вектора (потом станет понятно зачем)

Вторая функция
1. Начинаю искать место для ключа, проверяя свободна ли эта ячейка или нет, если занята - увеличиваю шаг и проверяю пока не дойду до конца (того самого размера массива). Помимо этого есть булевская переменная которая при нахождении места для ключа дает ТРУ.
2. Проверяю ТРУ ИЛИ НЕ ТРУ. Если не тру: вызываю функцию рекурсивно, передавая в качестве ключа 0 (ищем теперь не с ключа, а сначала), а в качестве размера поиска (в пред пункте размер массива) я передаю ключ, чтобы не повторять действия выполненные в пункте 1

Так вот, хуйня в том, что если мой массив будет размером и колвом элементов n, то с шагом равным 1 он забьет этот массив, все заебись. Даже если я увеличу кол-во элементов - он ресайзнется, норм работает в общем, НО, если я делаю шаг равным 2 - ломается нахуй. Проблемы с выделением памяти.

В чем мой алгоритм плох? С хуя он выходил за рамки, если по идее сделав шаг, который в сумме даст размер больший n - я просто начну искать место сначала, а проверка на забитость у меня еще до заполнения.
#289 #742561
>>742556

>Поэтому мы всегда знаем, где его голова, а где хвост.


Если на планете используется little-endian, то барашку не поздоровится.
#290 #742562
>>742550
Я тебе сейчас секрет открою: ди и без того используется в крупных проектах. Та же Remedy использует его не один год во всех своих ААА проектах.

Тут дело в людях.
>>742575
#291 #742563
>>742554
Ну возможно, спорить не буду. Просто даже в наших велосипедных самописных либах я не встречал шаблонов, кроме как для написания своих контейнеров. Просто от Александреску у меня сложилось впечатление что он все пишет только на шаблонах трудно читаемый код и никак иначе.
>>742567
#292 #742564
>>742553

>А в крестах не обиваешь, лол?


В крестах накоплено огромное количество знаний, на поиск ответов уходят секунды.

>В него "вкатиться всерьез" можно за неделю


Я подразумеваю не освоение языка, а переход на него в реальной работе. Нужен софт, нужны хорошие практики, нужны набитые шишки, в конце концов. А их нет. Поэтому тот, кто начнет серьезный проект на D, будет как раз набивать шишки и нарабатывать опыт для себя и других. А можно потратить это время и силы по существу, если не сходить с проторенной дороги без необходимости.
>>742577
#293 #742567
>>742563
Открой исходники STL или того же boost, например. Чем крупнее и универсальнее либа, тем больше необходимость.
>>742590
#294 #742575
>>742562
Remedy всплывает почти в каждом споре про D, лол. Одного крупного проекта недостаточно для выработки best practices, нужны сотни.
>>742585
#295 #742577
>>742564

>В крестах накоплено огромное количество знаний, на поиск ответов уходят секунды.


А в D эти знания тупо не нужны. Там просто есть стандартная библиотека, в которой есть все что нужно. И в средствах языка есть абсолютно все, что нужно. Там не нужно искать "как накостылить то или это". Там не нужен буст. Чтобы на нем кодить - не нужен SO вообще, и гуглить какие-то костыли. Достаточно просто прочитать доку к его библиотеке.

>Нужен софт, нужны хорошие практики


Блин - это просто улучшенные жабокресты. Юзаешь те же самые практики, просто минус костыли.
Там не нужно блин читать стопицот книжек по тонкостям шаблонов как в крестах - потому что там шаблоны пишутся нормально.
>>742611
#296 #742580
>>742559
Простота языка еще никогда не позволяла сажать макак на места сениоров. В любом случае макаки будут решать свои задачи, а специалисты - свои. Возможно, их жизнь будет легче, но кого это ебет, если ты банально не сможешь найти столько людей?
#297 #742581
>>742559
Количество людей зависит от размера проекта. Я просто не могу поверить, что для написания какого-нибудь интерпрайза с одинаковым функционалом людей со знанием ди нужно в два (3, 4 и т.д) раз меньше, хотя бы потому что на ди не написано столько фреймворков на все случаи жизни
>>742588
#298 #742585
>>742575
Аж 3 ААА игрушки, куча проектов в проде (каждый год куча народу на dconf из новых компаний выступает).

Вот конкретно какие практити плюсов ты используешь? Виртуальный деструктор?
#299 #742586
Это какая-то местная забава в каждом треде пытаться доказать что D лучший язык на свете и всем надо писать только на нем?
>>742591
#300 #742587
>>742544

>Задача ди - сделать кресты с нормальной библиотекой и без выстрелов в ногу и костылей


Поясните, а что в С++ за костыли и выстрелы в ноги?
>>742592
#301 #742588
>>742581
Для ди просто не нужны фреймворки, лол.
Там просто есть нормальная стандартная библиотека.
90% того, что пилят Qt или буст - там или встроено в язык, или в библиотеку.

Это в крестах - сколько там вариантов строк? std::string, char*, QString, cv::string, что-то из буста для питона? Кто больше вспомнит?

То же самое для массивов, умных указателей, неба и аллаха.
>>742594>>742596
#302 #742590
>>742567
Да я же не говорю что не нужны совсем, я говорю что большинству не нужны. В том числе и мне.
#303 #742591
>>742586

> местная


Это один батхертнутый. Он недавно появился, еще и года наверное не прошло.
#304 #742592
>>742587
Ну вот тебе самое простое - модульность.
Ебаные пересечения инклудов и дефайнов.
>>742597>>742602
sage #305 #742594
>>742588

> Dбил думает что все задачи можно решить универсальным классом

#306 #742596
>>742588
Жди, может начнут пилить для ди свои фремворки, обертки над стандартной библиотекой и там все это появится. Ведь программисты любят писать свои велосипеды
>>742601
#307 #742597
>>742592
Что же получется, крестоносцы сами ругают свой язык, но продолжают жрать кактус?
>>742603
55 Кб, 540x361
#308 #742599
аноны, есть тут такие же всратые как я, которые не могли понять списки и деревья? дайте какой-нибудь гайд понятный. курю джесса либерти "с++ за 21 день бесплатно без смс", но там пример охуевший.
суть то ясна, все просто, но вот как создавать их, добавлять, как-либо упорядочивать их, етс?
>>742610
#309 #742601
>>742596
Ну они там есть. Vibe.d К примеру, что-то вроде RoR, для сайтиков.

Но в отличие от него, кресты в голом виде неюзабельны - нужно обязательно накатывать Qt или буст, чтобы их уже как то юзать. А они реализуют пересекающуюся функциональность.
>>742612
#310 #742602
>>742592
Это же как нужно писать чтобы ifndef'ы совпали ...
#311 #742603
>>742597
Ну они пытаются прикрутить все это костылями. Вон модульность обещали как-то прихреначить - но в ++17 таки обломали.
#312 #742610
>>742599
Чтобы понять деревья, нужно знать основы теории графов, это несложно на самом деле, больше учить новые термины.
Списки ещё легче. Вообще берешь любую книгу по дискретке или алгоритмам, находишь главы про структуры данных, графы, и читаешь. Там всё это есть.
>>742618
#313 #742611
>>742577
Это что-то уровня аргумента хаскеллистов про "если собралось, то 99% работает правильно". Давай по пунктам:

1. Я использую VS с кучей плюшек, наподобие визуальной отладки. Что может предложить инфраструктура D, чтобы погроммист получил сравнимые удобства? Сколько всего IDE для D и какова вероятность, что каждый сможет перекатиться со своей IDE на новую, не прожигая стул от ее ущербности?
2. Я хочу сделать хитровыебанную хуйню, которой точно нет в стандартных библиотеках. Сортировать графы графов аудиокодеков, епту. В крестах я гуглю и нахожу стороннюю либу в 99% случаев. В скольки процентах случаев я найду таковую на D? Сколько денег понадобится на содержание дополнительных макак, ответственных за прикручивание библиотек из других языков к D? Что делать с принципиально непробрасываемыми вещами типа тестовых фреймворков?
>>742622>>742623
#314 #742612
>>742601

> кресты в голом виде неюзабельны


а никому и в голову не приходило в стандартную библиотеку все тащить, или писать каждый раз свои велосипеды
#315 #742617
>>742560
Бамп
>>742620
#316 #742618
>>742610
основы теории графов знаю, но не понимаю, как это соотносится. я говорю, смысол деревьев и списков мне ясен, а вот все остальное - нет
>>742624
#317 #742619
>>742560

>проблемы с выделением памяти


>описал алгоритм, но не приложил исходники

>>742625>>742640
#318 #742620
>>742617
код давай, нихуя нипонятно
>>742640
#319 #742622
>>742611

>Сколько всего IDE для D и какова вероятность, что каждый сможет перекатиться со своей IDE на новую, не прожигая стул от ее ущербности?


Нормальных две - плагин для идеи, и плагин для xamarin studio - monodevelop (эта мне нравится больше). Есть еще плагин для визуалстудии, но его я не пробовал, потому как у меня линупс, а она не кроссплатформенная.
Есть еще на эклипсе - мне не понравилась, вариант для KDevelop (только линупс + вечная альфаверсия, не рассматриваю), плюс велосипеды написаные на самом себе.

>Сортировать графы графов аудиокодеков, епту.


Тут охрененная стандартная библиотека, в частности - охрененные шаблоны. Сортируй что хочешь, просто заинклудь std.algorythm и хоть обдрочись, там реально все на все случаи жизни.

>В скольки процентах случаев я найду таковую на D?


Что именно например?

И да - ди просто может юзать сишные и крестовые либы, они совместимы.

>Что делать с принципиально непробрасываемыми вещами типа тестовых фреймворков?


Юниттесты уже встроены в язык и систему сборки. И еще какие-то контракты, их я не пробовал.
#320 #742623
>>742611

> Сколько всего IDE для D и какова вероятность


Как минимум 2 полноценные (1 из них плагин к студии), т.е. как и у плюсов - либо божественные и тормозящие одновременно цлион и студия, либо инвалиды вроде креатора, которые пидорасятся от любого более менее хитровыебаного кода.

>ответственных за прикручивание библиотек из других языков к D


Там всё что нужно прикручивается из тех же плюсов копипастой с минимальным рефакторингом и 1 лишней строчкой кода.

>Что делать с принципиально непробрасываемыми вещами типа тестовых фреймворков?


Непереносимые вещи лучше оставить там, где они были изначально. Если ты изначально брал чужую библиотеку - сомневаюсь, что горишь желанием её редактировать.
>>742637
#321 #742624
>>742618
Что остальное? Алгоритмы сортировки? Так читай есть разные деревья, для них свои сортировки
>>742630
#322 #742625
>>742619
Вот именно, что описал весь алгоритм. Какие могут быть проблемы с ресайзом? Проблема видимо в алгоритме, возможно где-то просчитался или что-то забыл
>>742628
#323 #742628
>>742625
вангую в коде хуяйня типо massive[i+1], но ты же на словах все верно написал?
>>742640
#324 #742630
>>742624
Р-Е-А-Л-И-З-А-Ц-И-Я
хрен с деревьями, давай вот про списки, односвязные хотя бы
>>742635
#325 #742631
>>742560

> делаю шаг равным 2


Если у тебя массив с четным количеством элементов то с шагом два ты пройдешь только по половине элементов.
#326 #742633
>>742622

>И да - ди просто может юзать сишные и крестовые либы, они совместимы.


А про сишку - и вовсе считай надмножество сишки, там как часть стандартной библиотеки - запендюрена как import core.stdc. Плюс платформозависимые вещи для упарывания сисколлами, posix-хуесикс.
#327 #742635
>>742630
Это вообще просто. Грубо говоря ты хранишь значение и указатель на следующий элемент, при добавлении элемента делаешь new, при удалении бегишь в конец и удаляешь, потом снова, пока так все не удалишь. Сортировать можешь хоть пузырьком, просто указатели устанавливаешь на другие элементы
#328 #742637
>>742622
>>742623
Хорошо, все-таки неправильно будет на такое писать возражения с дивана. Я попробую заюзать анонсированное тобой, и потом сможем более аргументированно посраться, если захочешь.
>>742642
#329 #742639
Поясните за статические и динамические библиотеки.
В чем разница? Зачем для динамической линковки нужна статическая либа?
>>742641>>742955
#330 #742640
>>742628
>>742619
>>742620
http://ideone.com/nImRxW

держите мой говнокод
>>742660>>742830
#331 #742641
>>742639

>Зачем для динамической линковки нужна статическая либа?


А она разве нужна, лол?
>>742646>>742651
#332 #742642
>>742637
Я не против.
Спросишь тут или в дишкотреде, если будут какие-то затруднения.
#333 #742643
>>742622

>Что именно например?


Например, видеостриминг, есть там такое?
#334 #742645
>>742643
Что ты конкретно имеешь в виду? Назови из крестов что ты юзаешь для этого.
>>742652
#335 #742646
>>742641
Он, наверное, про хэдеры говорит?
#336 #742647
>>742646
Ну можно и без хедеров, просто гемора больше.
#337 #742648
>>742646
Да нет. Я подключаю dll, а VS просит lib
#338 #742649
>>742643
Да класс Karina.d
>>742653
#339 #742650
>>742643
Есть например биндинг к ffmpeg - ffmpeg-d.
>>742653
#340 #742651
>>742646
>>742641
Я даун. dllexport не прописал.
#342 #742653
>>742649
>>742650
Бля, да ладно вам. Ну не может быть, что в D вообще все есть!
>>742654>>742656
#343 #742654
>>742652
Есть биндинг к gstreamer, как часть биндинга gtk-d.
>>742653
D просто совместим с крестами и сишкой, лел.
#344 #742656
>>742653
Ди - у нас все есть, но никто не пользуется
#345 #742657
>>742652

>няшная


>есть ли для ди


Ты так смеёшься?
#346 #742660
>>742640
У крестогоспод ifstream сам открывает файл в нужном режиме, сам приводит прочитанные куски файла к нужному виду? нихуя себе йоба, а я в жопу пердолился с няшной чистой
>>742662
#347 #742662
>>742660

>к нужному типу


Я еблан да.
#348 #742665
А еще на Ди можно писать борды. Там есть pedalik.d который считается устаревшим и более новый makaka.d
>>742666
#349 #742666
>>742665
А я кстати собираюсь написать на D свою борду, лол.
#350 #742668
Как там вообще у Ди дела? Новые фичи когда будет или язык идеален?
>>742676
#351 #742676
>>742668
А каких фич тебе там не хватает?

Мне не хватает нативной гуйни, а-ля import gui.*
Пока перебиваюсь биндингом dqml.
>>742690
#352 #742690
>>742676
Раз так все замечательно то почему Ди не взлетел?
>>742695
#353 #742695
>>742690
А он не взлетел?
Что в твоем понятии "взлетел"?
>>742702>>742703
#354 #742702
>>742695
Используется более, чем 10к людей.
>>742706
#355 #742703
>>742695
Количество проектов, обсуждение языка. На хипстерском го много кода, много статей, все о нем говорят, на том же хабре ни дня без статьи про го, а про Ди я вообще ничего не слышу
>>742706>>742710
#356 #742706
>>742702
Зачем тебе это, это сродни дрочки на количество подписчиков на ютабе?

>>742703
Но при этом ди гораздо лучше хипсторского го.
Го пиарит гугл, го - типо "инновация". Дишка - же просто "кресты 2.0".
Его никто не учит с нуля - не модно. На него только с крестов спрыгивают.
>>742711
#357 #742710
>>742703
Впрочем, и на хабре есть статьи о нем, пусть и не так много.
https://habrahabr.ru/hub/d/

Статьить нечего - он довольно прост. У него отличная документация без подводных камней - если просто пойти ее копипастить - какашками обольют.

У крестов же "популярность" (как и у сишки) очень просто объясняется - их преподают в вузиках и школах.
>>742861
#358 #742711
>>742706
Мне кажется не особо как-то спрыгивают. Никто не будет перписывать старый код, да и вообще народ как-то с опаской смотрит на Ди, как и на раст.
>>742713
#359 #742713
>>742711
Вот и ответ - старый код не переписывают, а новый - а все уже написано, лол.
#360 #742830
>>742640
AddInTable(0, name, number, key);
Под конец у тебя key будет >= last, и если он не найдет элемент за один проход, а потом еще и за второй, то выйдет за пределы при проверке. Видимо, ты хотел сделать от 0 до изначального key, тогда тебе в начало функции надо вставить что-то вроде const int originalKey = key; и затем делать AddInTable(0, name, number, originalKey);

Кстати:

>good != true


>good == false


Криво же выглядит, используй !good.
#361 #742861
>>742710
Паскаль тоже преподают, по твоей логике все должны писать на нем тоже. Жабу и похапе не преподают, почему же они в топе? Хуевый аргумент, короче, не находишь?
>>742862
#362 #742862
>>742861

>Жабу и похапе не преподают,


Лолват, это жабу то не преподают?
>>742863
#363 #742863
>>742862
Разве что на спецкурсах или в шибко продвинутых универах. Стандартный курс: паскаль-асм-няшная-кресты-лисп.
>>742865>>743043
#364 #742865
>>742863
Херню несешь. Жабу преподают массово что в западных универах, что у нас.
Да и насчет паскаля ты не ошибся - дельфи еще дохрена где остался. Но все так же - старый код.
>>743040
#365 #742955
>>742639
есть static library (.lib, содержащая бинарный код)
есть dynamic library (dll)
dll, в свою очередь можно линковать двумя способами - implicit (статически) и в рантайме explicit(на самом деле смособов больше, есть еще отложенная)
для implicit linking тебе тоже потребуется .lib файл, но только с секцией экспорта, те она работает как библиотека импорта здесь, а не как хранилище оттранслированого бинарного кода
#366 #742959
Помогите посчитать Pi, используя MPI, через другие ряды

Взял пример из статьи
https://ru.wikipedia.org/wiki/Message_Passing_Interface
http://pastebin.com/b2uztEqG

Все работает, вычисляет в несколько потоков. Но преподаватель хочет, чтобы считало другим методом, например, через другие ряды https://ru.wikipedia.org/wiki/Пи_(число). Как это реализовать?
>>742998>>743015
#367 #742998
>>742959
Берешь <random> и считаешь Бюффоном, самое то для распараллеливания.
#368 #743015
>>742959
А в чем проблема? Берешь любой ряд и пусть каждый процессор вычисляет свой кусок этого ряда. Все члены ряда зависят только от своего индекса, от соседних членов не зависят, поэтому проблем с распараллеливанием здесь нет никаких.

Ты не можешь найти кусок в коде, где происходит вычисление кусочка ряда (он, между прочим, откомментирован и там это место обозначено) и подменить одну формулу на другую?
>>743047
#369 #743040
>>742865
Двачую этого
Два семестра Java были после паскаля, крестов и дельфи

Про качество, конечно, говорить не буду, но ебалом в документацию окунули - уже хорошо

мимо-из-рггму
#370 #743043
>>742863
В россии лисп? Хуй знает. ООП на джаве любят преподавать, например.
>>743648
#371 #743047
>>743015
Да не могу, не работал с MPI и С++ до этого.
>>743168
#372 #743168
>>743047
Ну так почитай и разберись. Когда у тебя возникнут конкретные вопросы — тогда приходи, поможем.

Честное слово, я не против помочь человеку, который пытается разобраться, но на чем-то застрял, но мне дико бомбит от халявщиков, которые ничего читать и гуглить не хотят, а желают, чтобы им на блюдечке готовые решения давали.
«Я раньше с Х не сталкивался и не работал» — это не оправдание. Все мы раньше не сталкивались и не работал ни с чем, но как-то разобрались, знаешь.

Ресурсы по плюсам есть в шапке, про mpi можешь почитать, например, тут https://habrahabr.ru/post/121925/ или про любой другой ссылке в гугле про запросу "c++ mpi". Удачи.
#373 #743624
Нужна помощь с формочкой, уже не знаю куда обращаться. Диагноз прозвучал как приго... в смысле:
Есть функция в отдельном файле:

#include "MyForm.h"
void showvec(System::Windows::Forms::TextBox^ &textBox)
{
textBox->Text = "";
}

В нее, по идее, должен поступать адрес textbox->text и в функции этот параметр изменяться. Компилятор на функцию не ругается, а вот вызов не работает.
#374 #743628
>>743624
поправка:
{
textBox->Text = "";
}
>>743692
#375 #743648
>>743043
Говорю за ВМК-факультеты универов, специальность ПМиИ. В МГУ, КГУ, НГУ так. В институтах, возможно, другая программа.
#376 #743670
>>743624
Во-первых, отладчиком пройдись и посмотри, заходит он в эту функцию вообще или нет
Во-вторых, ты правильно разыменовываешь ссылки? У тебя там навешана и шарповская ссылка и сишная, ты уверен, что это так нужно разыменовывать?
>>743673>>743677
#377 #743673
>>743670
С формами и классами я в первый раз. В функцию не заходит, т.к. неоткуда. Я ее вызвать не могу. Насколько я понимаю:
Тип_результата имя_функции(тип_формального_параматра имя_формального_параметра)
По другому разыменовать не могу - ругается.
>>743675
#378 #743675
>>743673
А что ты ей передавать пытаешься?
>>743678
#379 #743677
>>743670
void showvec(System::String^ *textBox)
Можно попробовать, но я не знаю как с ним работать.
#380 #743678
>>743675
Я пытась передать адрес тексбокса, чтобы с ним работать внутри функции.
>>743687
#381 #743687
>>743678
вызов покажи
>>743688
#382 #743688
>>743687
Честно говоря, мне стыдно. Перепробовал несколько, вот самый адекватный из них:
showvec(&textBox1);
>>743692
#383 #743692
>>743688
>>743628
>>743624
Ты нормально покажи весь код, что откуда вызывается. По функции из одной строчки никто ничего тебе не скажет.
>>743702
#385 #743705
>>743702
сообщение об ошибке компилятора тоже в студию
>>743706
#386 #743706
>>743708
#387 #743708
>>743706
void showvec(System::String^ textBox)
вот таким вот объявление функции сделай
^ -- это уже ссылка, добавлять & или * не нужно
>>743713>>743732
#388 #743713
>>743708
Спасибо, теперь компилятор не ругается! Но функция не работает, гугл говорит, что '^' - это побитовое исключение.
Может, я ошибся с вызовом?
showvec(textBox1->Text);
>>743716
#389 #743716
>>743713
вызывать ты так должен:
showvec(textBox1);
>>743721
#390 #743721
>>743716
Но ведь я не могу так вызвать(+ только что проверил)
Класс схож со структурой.
Если у меня структура:
struct randomstruct
{
char c[10];
char d[10];
}
и переменная
randomstruct a;
То чтобы что-то записать в 'а', я должен указать элемент структуры:
a.b='g'
>>743722>>743732
#391 #743722
>>743721

>a.b='g'


a.c='g'
самофикс
#392 #743732
>>743708
ой фак, я тебе не то скопировал
вот так у тебя функция должна быть объявлена:
void showvec(System::Windows::Forms::TextBox^ textBox)
вот так ты её доложен вызывать:
showvec(textBox1);

>>743721
Тип System::Windows::Forms::TextBox^ -- это шарповская ссылка, что-то вроде shared_ptr, только со свистелками, считай что это просто умная обертка над указателем. Когда ты пишешь showvec(textBox1); ты передаешь внутрь функции указатель на своей текстБокс и используешь его внутри. Никаких присваиваний структур делать не надо.
>>743738>>743743
#393 #743738
>>743732
Спасибо, я уже не смогу сегодня проверить. Час с копейками на меня потратил... Отпишусь потом.
>>743743
#394 #743743
>>743732
>>743738
На самом деле я все смог проверить. Все работает, ты мне очень помог, спасибо тебе. А то я с утра мучаюсь.
37 Кб, 1124x553
#395 #744464
почему оно не считывает первый массив междуй хуй1 и хуй2?
#396 #744491
Каким образом функция main(int argc, char *argv[]) при исполнении получает свои аргументы? Кто ей их передает в юниксах и в шиндовс? Где документация на это?
>>744506>>744559
#397 #744493
>>744464
Может компилятор выкинул нахуй. Ты там гарантировано за буфер вылазишь, это UB - тоесть компилятор может засунуть туда что угодно, хоть винт отформатировать и это будет полностью соответствовать стандарту.
>>744495
#398 #744495
>>744493
в вижуалзе точно такойже результат
>>744506
#400 #744506
>>744491
ОС передает. Читай в документации к своей операционной системе.
>>744495
Чем бы твой "вижуалз" небыл, это врядли что-то меняет. Если ты объявил массив foo размера bar то читать или писать в foo[bar] ты не можешь. Это UB.
>>744532
#401 #744532
>>744506

>ОС передает. Читай в документации к своей операционной системе.


Посмотрел сейчас в дебаггере и выяснил, что шиндовс предварительно обрезает все лишние пробелы из argv.

Правда по адресу, где оно находится, предварительно лежит в памяти какое-то дерьмо неясного происхождения.

Дополнительные ссылки на документацию приветсвуются.
>>744557
#403 #744559
>>744491

> The POSIX standard declares exec functions in the unistd.h header file, in C language. The same functions are declared in process.h for DOS (see below), OS/2, and Microsoft Windows.


Нашел. Вроде оно.
>>744622
Помогите с пердолингом #404 #744610
Посоны, поясните такую вещь:
Указатели argv[0]...argv[argc-1] ссылаются на участки памяти, где лежат аргументы командной строки.
Указатель argv[argc] ссылается на NULL (0x00000000), как ему и положено.

А почему argv[argc+n] ссылаются на рандомные(?) участки памяти? Ну по крайней мере отладчик студии мне именно это показывает. Так и должно быть?
>>744623>>744658
#405 #744621
Дополнительное исследование показало, что максимально я могу обратиться из под отладчика к argv[argc+2321], а к argv[argc+2322] уже не могу. Лол. Сейчас проведу эксперимент, что будет если прочитаю по этому адресу из работающей программы.
>>744626
#406 #744622
>>744559
Потому что это уже не часть массива argv, там память, относящаяся к чему-то другому. Читать из нее это UB, поэтому у тебя все имело право вообще покрашиться. Но фактически просто нет контроля, и загрузчик может при каждом запуске изменять порядок argv и других данных по какой-то своей внутренней логике. Если тебе не повезет и argv окажется в конце виртуального сегмента, то сработает защита и выбросится SEH (как правило), если же после argv идет другая глобальная переменная или просто неиспользуемая часть выделенной тебе памяти, то ты просто считаешь ее.
>>744623>>744657
#407 #744623
#408 #744626
>>744621
Под отладчиком и без отладчика ничего не отличается же, если собрано с одними и теми же параметрами.
#409 #744632

> Сейчас проведу эксперимент, что будет если прочитаю по этому адресу из работающей программы.


Случилось вот что. Для argv[argc+2322] все прошло ок:
Argv[2328] is a: "(null)"
А для argv[argc+9999] сдохла со словами:
Unhandled exception at 0x00ed1070 in print_argv.exe: 0xC0000005: Access violation reading location 0x0065c544.
>>744642>>744703
#410 #744642
>>744632
Запусти свою программу из-под OllyDbg, вообще охуеешь, как там все устроено. Любопытство - это здорово, вообще-то. Если ты не растеряешь его и научишься ставить настоящие вопросы, то цены тебе не будет, братюнь.
#411 #744656
>>744464

>>std::cin >> n;


Считывает только число, отставляя '\n' в буфере, который подбирается первым getline
#412 #744657
>>744622

>сработает защита и выбросится SEH (как правило)


Полез читать что такое SEH я нюфаня и обнаружил такое письмо, от автора SEH:
https://www.justice.gov/sites/default/files/atr/legacy/2006/03/03/1341.pdf
А Билл Гейтс голова! Посоны, а вы умеете преобразовывать код из Паскаля в С++ и из С++ в Джаву?
#413 #744658
>>744610
lol, по-твоему вся память начиная argv+argc должна нулями забиваться. Сам понимаешь что это бред?
>>744660
#414 #744660
>>744658
Тем не менее, по факту часто вся свободная память забивается в режиме отладки нулями, 0xDEADBEEF или чем-то подобным.
#415 #744703
>>744632
Смотри, существует такая штука как пейджинг (paging), погугли и почитай что это такое. Если вкратце -- те адреса, которые ты имеешь в своей программе -- это не физические адреса реальных ячеек в оперативной памяти, а виртуальные адреса, которые операционная система отображает на реальные ячейки памяти. У каждого процесса в системе есть виртуальная таблица страниц отображенной для него памяти. Каждый указатель в твоей программе -- это, грубо говоря, индекс в этой таблице. Когда ты обращаешься к памяти по какому-либо указателю, система за кулисами идет в эту таблицу, смотрит на индекс и если в этой таблице такой индекс есть, то она читает ячейки соответствующие записи в таблице по этому индексу. Если такого индекса в таблице нет, то бросается исключение что-то вроде access violation, мол, полез ты не в свою память, дружок, хуй тебе. На процессоре дергается прерывание и в программу твою прилетает сигнал SIGSEGV (это в posix, что там в винде я не знаю), который её и грохает (если ты, конечно, не перехватываешь его, но это уже другая история).

Стоит еще сказать, что память выделяется кусками -- страницами. Если ты выделишь память в один байт, то для твоей программы выделится целая страница, поэтому если ты напишешь, скажем, что-то такое: char x = new char; (x+1) = 42; То с высокой долей вероятности у тебя программа не упадет, несмотря на то, что ты юзаешь невыделенную память. Но может и упасть, если компилятор соптимизирует код таким образом, что этот байт будет выделен где-то на конце страницы, но это OCHE маловероятно.

Когда ты свою прогу запускаешь, система выделяет для неё память и куда-то в эту память кладет аргументы командной строки. Соответственно по указателям на эти аргументы есть записи в табличке страниц и когда ты из них читаешь все хорошо. Вероятно эти страницы помечены флагом readonly и если ты попробуешь в них что-то писать, тебя система пидорнет. Когда ты начинаешь итерироваться по argv[argc+n], первое время ты итерируешься по уже выделенной странице, т.к. маловероятно что аргументы так удачно выровнятся, что попадут прямо в конец страницы и следующий же байт окажется на другой странице, скорее всего впереди еще есть сколько-то байт до конца страницы и ты можешь из них читать. Но рано или поздно ты дойдешь до конца страницы и уже следующий байт будет ссылаться на несуществующую запись в таблице страниц и система тебя грохнет способом который я описал выше.

Вообще если тебе интересна эта тема, почитай Таниенбаума, он всю эту кухню по хардкору расписывает.
#415 #744703
>>744632
Смотри, существует такая штука как пейджинг (paging), погугли и почитай что это такое. Если вкратце -- те адреса, которые ты имеешь в своей программе -- это не физические адреса реальных ячеек в оперативной памяти, а виртуальные адреса, которые операционная система отображает на реальные ячейки памяти. У каждого процесса в системе есть виртуальная таблица страниц отображенной для него памяти. Каждый указатель в твоей программе -- это, грубо говоря, индекс в этой таблице. Когда ты обращаешься к памяти по какому-либо указателю, система за кулисами идет в эту таблицу, смотрит на индекс и если в этой таблице такой индекс есть, то она читает ячейки соответствующие записи в таблице по этому индексу. Если такого индекса в таблице нет, то бросается исключение что-то вроде access violation, мол, полез ты не в свою память, дружок, хуй тебе. На процессоре дергается прерывание и в программу твою прилетает сигнал SIGSEGV (это в posix, что там в винде я не знаю), который её и грохает (если ты, конечно, не перехватываешь его, но это уже другая история).

Стоит еще сказать, что память выделяется кусками -- страницами. Если ты выделишь память в один байт, то для твоей программы выделится целая страница, поэтому если ты напишешь, скажем, что-то такое: char x = new char; (x+1) = 42; То с высокой долей вероятности у тебя программа не упадет, несмотря на то, что ты юзаешь невыделенную память. Но может и упасть, если компилятор соптимизирует код таким образом, что этот байт будет выделен где-то на конце страницы, но это OCHE маловероятно.

Когда ты свою прогу запускаешь, система выделяет для неё память и куда-то в эту память кладет аргументы командной строки. Соответственно по указателям на эти аргументы есть записи в табличке страниц и когда ты из них читаешь все хорошо. Вероятно эти страницы помечены флагом readonly и если ты попробуешь в них что-то писать, тебя система пидорнет. Когда ты начинаешь итерироваться по argv[argc+n], первое время ты итерируешься по уже выделенной странице, т.к. маловероятно что аргументы так удачно выровнятся, что попадут прямо в конец страницы и следующий же байт окажется на другой странице, скорее всего впереди еще есть сколько-то байт до конца страницы и ты можешь из них читать. Но рано или поздно ты дойдешь до конца страницы и уже следующий байт будет ссылаться на несуществующую запись в таблице страниц и система тебя грохнет способом который я описал выше.

Вообще если тебе интересна эта тема, почитай Таниенбаума, он всю эту кухню по хардкору расписывает.
>>744774
#416 #744774
>>744703
Бро, как-то ты смазанно рассказал про paging и memory regions, поэтому я добавлю:

- Раньше оперативной памяти не хватало и программисты писали некую срань под названием "оверлеи". Они перекидывали из оперативки на жесткач, кусочки программы, которые прям сейчас были не нужны. Потом олдфаги заебались и решили перекинуть этот геморрой операционной системе.
- Разработчики ОС и железа поднатужились и высрали технологию, которую назвали paging (страничной памятью). Помимо автоматического перекидывания данных из памяти на диск и обратно, оно еще дает виртуальное адресное пространство, так что программисты перестали терпеть жопоболь из-за дележки памяти с другими программами и ядром ОС.
- Помимо этого, посоны обнаружили, что ебаны в рот, кулхацкеры не дремлют и регулярно пытаются заставить комп выполнять опасный код. Для противодействия этому придумали разделение памяти на сегменты(memory regions), которые призваны запретить интерпретацию данных программы как инструкций. Поддержали сразу и программно, и в железе.

Помимо этого в intel придумали еще и сегментную память. Это такие крутые memory regions, где у каждого региона свое адресное пространство. В современных ОС не используется, потому что разработчики *nix и windows в рот ебали эту дрисню. Дело в том, что из-за нее сильно изменилась бы работа с памятью, а поскольку на других архитектурах эту ёбань не завезли, им пришлось бы дико пердолиться, поддерживая разные модели памяти для платформ. Поэтому в x64 intel выпилили нахуй сегментную память из процессора, ибо только место занимает.
269 Кб, 877x877
#417 #744861
#418 #744864
почему тут move конструктор не вызывается, знает кто?
https://ideone.com/TFMirB
>>744870
#419 #744870
>>744864
А зачем там move-конструктор? Он лишний. Там RVO, никаких лишних действий.
>>744949>>744994
#420 #744949
>>744870
Более того, если компилятор не умеет делать RVO, то по стандарту он обязан заюзать копирующий move-конструктор.
>>744994
#421 #744994
>>744870
>>744949
А как так тогда получается?
http://rextester.com/FGDME69292 (Clang)
http://rextester.com/EVZMH86408 (MSVS)
2 компилятора - разный вывод, кто прав?
#422 #745001
>>744994
Все правы, это implementation defined behaviour. Стандарт разрешает, но не обязывает делать RVO, каждый дрочит как он хочет.
>>745010
#423 #745010
>>745001
>>744994
Вот поэтому кресты и ни разу не кроссплатформенное говно.
>>745025>>745033
#424 #745025
>>745010
gcc есть везде
#425 #745033
>>745010
На подкапотном уровне тебе никто не обещал кроссплатформенности, маня. Пиздец, так можно про любой язык кукарекать А ЧИВО ЕТА РАЗМЕР БИНАРНИКА ИЗМИНИЛСЯ ПРИ ПЕРЕХОДЕ С КАЛЬКУЛЯТОРА НА СТИРАЛЬНУЮ МАШИНКУ?!!!111 НА ЛИНУПСЕ JVM ЖРЕТ НА ПОЛТОРА МЕГАБАЙТА БОЛЬШЕ РЯЯЯЯЯЯЯ!!!1111 ПИСТОН СТАЛ РАБОТАТЬ БЫСТРЕИ И МАЯ ВЕЛОСИПЕДНАЯ СИНХОРИНЗАЦИЯ ОТВОЛИЛАСЬ!!!!!11111
#426 #745048
>>744994
Ты в глаза ебешься? Поведение MSVC - это как раз тот случай, когда компилятор не умеет делать copy elision в данном конкретном случае. Вместо этого он заебенил move-семантику.
Лично меня такое поведение удивило. Вроде раньше студия умела в RVO в таком простом случае. Может баги полезли из-за внедрения move-семантики

Вообще, copy elision - единственная оптимизация, которую можно выполнять даже в тех случаях, когда у конструкторов копирования есть побочные эффекты.
149 Кб, 504x1301
#427 #745059
подскажите годную цветовую схему для кода
>>745073
#429 #745089
>>744994

> 2 компилятора - разный вывод, кто прав?


Правило простое - MSVS всегда неправ.
>>745103
#430 #745103
>>745089
Если MSVS неправ, то Герб продавит изменение стандарта и он таки станет прав.
#431 #745127
>>745073
ужас какой
#432 #745186
#include <iostream>
#include <string>
using namespace std;

int main()
{ string line("some line");
for (auto bukva : line){
bukva="x";
cout<<line<<endl;}
return 0;
}
Выдает
invalid conversion from 'const char*' to 'char' [-fpermissive]
Что я сделал не так?
>>745192>>745196
#433 #745192
>>745186

>bukva="x";


одинарные кавчки
#434 #745196
>>745186
Ты так буквы в строке меняешь? Тогда auto &bukva
#435 #745353
То чувство когда реализуешь уже третий раз один и тот функционал и всякий раз получается не так как было до этого, хотя функции не меняются.
#436 #745471
int i = 2000;
boost::thread* t = new boost::thread( boost::bind(&Player::use,i) );

Почему не работает?
#437 #745481
>>745471

>>Player p;


>>auto t = boost::thread(boost::bind(&Player::use, &p, i));


Метод должен вызываться относитедьно объекта.
Читай доки блджад!
http://www.boost.org/doc/libs/1_61_0/libs/bind/doc/html/bind.html
>>745483
#438 #745482
>>745471
И нахер тебе сырой указатель??!
>>745483>>745484
#439 #745483
>>745481
А если я прям из класса Player и вызываю
>>745482
Да я перекомпилил уже как только могу, мозг немного треснул
>>745486
#440 #745484
>>745482
Не втдишь, человек игру делает, все должно быть производительно.
>>745488
#441 #745485
>>745471
И вообще лучше будет так:

>>auto t = boost::thread(&Player::use, &p, i);


или

>>auto t = boost::thread([&p] {p.use(i);});

>>745489
#442 #745486
>>745483
В смысле если метод статический?
>>745489
#443 #745488
>>745484
И как сырой указатель тут улучшит производительность??
>>745492
#444 #745489
>>745486
Да нет, прямо из интанса и вызываю
Какая впизду игра, переименовал палевное название структуры в первое что в голову придет
Отлично, this закатило.
>>745485
Когда-нибудь я тоже буду шарить на твоем уровне

спасибо всем, добра
#445 #745492
>>745488
Ну так оверхеда нет, что ты начинаешь?
#446 #745493
>>745492
RVO, move semantics?
#447 #745494

>Оптимизируют без профайлера


>заменяя умные указатели сырыми


>на объекте потока



Совсем поехали ньюфаги
#448 #745495
>>745492
В любом случае make_unique > new
#449 #745502
>>745492
Ну и в довесок

>> auto t = thread(...);


вызывает меньше аллокаций
#450 #745735
#include <iostream>

int main(){
int p;
std::cout << sizeof(
p);
return 0;
}

Каким образом этот код правильно выполняется?
p - указатель на еще не выделенную память, переменной не существует. Какого хуя тогда
>>745737
#451 #745737
>>745735
sizeof((звездочка)p);
>>745740
#452 #745740
>>745737
#include <iostream>

int main(){
int (звездочка)p;
std::cout << sizeof((звездочка)p);
return 0;
}

годный редактор текстов, ничего не скажешь
#453 #745748
#454 #745750
>>745740
sizeof - это оператор, который работает во время компиляции, а не в рантайме. Благодаря тому, что плюса статически типизированы, размер переменной ясен уже на этапе конпиляции.
>>745825
#455 #745751
>>745740
А что не так? sizeof(*p) вернет размер инта относительно char.
>>745757
#456 #745757
>>745751
Не размер относительно char, а размер в байтах. Если что, char не обязан быть размером 1 байт.
>>745777
#457 #745777
>>745757

>Не размер относительно char, а размер в байтах. Если что char обязан быть размером 1 байт, стандарт прямо указывает что sizeof(char) == 1 для всех реализаций. При этом в char не обязательно должно быть 8 бит.


исправлены неточности
>>745781>>745818
#458 #745778
суп, аноны. такой вопрос: как в этом вашем кодлайте сделать так, чтобы дебажил в моем няшном терминальчике, а не в сраном xterm?
>>745822
#459 #745781
>>745777
Да, верно, спасибо.
#460 #745818
>>745777
Но 1 байт это и есть 8 бит, значит обязан.
Байт размером не 8 бит это не байт, а какое-то другое название
>>745829>>745833
#461 #745822
>>745778
в настройках смени
>>745827>>745850
#462 #745825
>>745750
Так нет никакой переменной. p - указатель на переменную, которой не существует
>>745845
#463 #745827
>>745822
8 бит - это октет
>>745829
#464 #745829
#465 #745833
>>745818

> Но 1 байт это и есть 8 бит, значит обязан.


Почему тупоголовые обязательно решают написать посты и обнажить свою глупость? Если ты туп, то сиди ридонли.

> The unit octet was defined to explicitly denote a sequence of 8 bits


> byte is a unit of digital information that most commonly consists of eight bits


> Various implementations of C and C++ reserve 8, 9, 16, 32, or 36 bits for the storage of a byte. The actual number of bits in a particular implementation is documented as CHAR_BIT as implemented in the file limits.h.

>>745849
#466 #745845
>>745825
Есть переменная p, которая указывает на int, этого достаточно компилятору. И p - это не указатель на переменную, а указатель на участок памяти.
#467 #745849
>>745833
Эй долбаеб, ты кто такой чтобы решать что мне делать? Что по кайфу то и делаю мудила, ебало завалил
>>745860>>745883
#468 #745850
>>745822
пробовал, но там можно настроить только запуск без отладки. без отладки запускается то, что надо. но в дебаге все равно запускает xterm
>>745893
#469 #745860
>>745849
Этот зверек подорвался. Несите следующего.
#470 #745877
Сап, аноны. Помогите разобраться с УСЛОВИЕМ задачи. дожили блять
Есть задача:
Дана структура классов программного проекта. Необходимо построить процесс компиляции с помощью топологической сортировки.

Что есть топологическая сортировка я просек, но как понимать СТРУКТУРА КЛАССОВ ПРОГРАММНОГО ПРОЕКТА. О зависимости классов я понял, наследование там, все такое, но что есть СТРУКТУРА КЛАССОВ? Как мне ее передавать и в каком виде она вообще передается.
>>745887
#471 #745883
>>745849
Сасай, бездарность. Иначе в следующий раз просто нахуй пошлем.
#472 #745887
>>745877
Имеется в виду граф классов, где ребра отображают отношения между классами (наследование или композицию).
>>745890
#473 #745890
>>745887
окей, это я тоже понял, что необходимо построить граф. про композицию почитаю. но откуда брать этот граф, точнее не так, в каком виде считывать классы?
>>745896
#474 #745893
>>745850
Забей ты на кодлайт, это говно тут всего пара анонов пиарит. В энтерпрайзе все юзают (в порядке убывания) MS VS / Eclipse CDT / QtCreator / CLion. Лично я рекомендую eclipse, очень годный code assistant прямо из коробки.
>>745900>>745973
#475 #745896
>>745890
Если это просто задачка на графы, то тебе уже дается направленный граф, на котором нужно заюзать топологическую сортировку. При этом, раз тебя просят сделать топ. сортировку, то граф должен быть ациклическим, хотя по условию в нем могут быть циклы. Т.е. перед топ. сортировкой нужно найти и разорвать циклы.

Если это не чистая задачка на графы, то тебе нужно пропарсить файлы проекта, найти в нем определения классов (хватит обычных регулярок), построить граф этих классов, а потом сделать то, что нужно в чистой задаче на графы.
>>745901
#476 #745900
>>745893
акей. я вообще идешки недолюбливаю. уж очень тормозные. привык все через вим и терминал делать. но все же не хватает идешных фич. хотел из вима иде сделать. чото не осилил. в иде вим-мод сделан через жопу и это делает меня грустить. хотя qtcreator не плох вроде.
>>745903
#477 #745901
>>745896
Спасибо, задача как раз "нечистая". Буду пробовать, добра тебе
#478 #745903
>>745900

>уж очень тормозные


Анализ кода очень требователен к I/O операциям. Если IDE тормозят, то в VIM'е будет то же самое.

Решается покупкой ssd или пляской с tmpfs.
>>745906
#479 #745906
>>745903
спасибо. буду знать
#480 #745954
Поясните за это:
#define ERROR(str) do { (void)sizeof(str); } while(0)
Зачем цикл в макросе?
72 Кб, 429x340
#481 #745973
>>745893

>очень годный code assistant прямо из коробки

>>745974
#482 #745974
>>745973
Ты че, ебанутый? eclipse отлично открывает makefile проекты и прекрасно их анализирует. Например, проекты linux, freebsd, virtualbox я просто открыл и начал с ними работать. В других ide так сделать нельзя.
#483 #745979
>>745954
Данный цикл в макросе не делает ровным счетом ничего, а зачем он нужен я не понял (вроде бы реализует разное отношение к показу сообщений об ошибках в дебаг версии и в релиз версии). Но ты можешь понять тут или в книге "Enough Rope to Shoot Yourself in the Foot", откуда они этот макрос спиздили.
https://books.google.ru/books?id=wz2nBAAAQBAJ&pg=PA834&lpg=PA834
>>745980>>745982
#484 #745980
>>745979
Спасибо. Разобрался.
Если подставим в if без кавычек, то так будет норм работать.
226 Кб, 1252x3348
#485 #745982
>>745979
Вот кусок из книги.
#486 #745997
>>739169
А почему нельзя просто писать в разные файлы, а в консолях сделать банальный tail -f (в винде есть аналог, я уверен, например фар умеет) на каждый лог-файл?
#487 #745998
>>745954
чтобы был скоп и использование переменной. иначе может не скомпилировать или ругаться на неиспользованную переменную
#488 #746007
Ребята, обучаюсь на курсах, пришло время выбрать выпускной проект, а что-то ничего в голову не лезет, может вы кто что подскажет?
>>746014
#489 #746014
>>746007

>обучаюсь на курсах


лох
#490 #746015
>>745954
do while(0) idiom
#491 #746047
Что скажете про tinyxml2? Норм или есть ещё аналоги лучше?
>>746187
#492 #746048
Байтоебы, поясните за адресное пространство в шине PCI. Таненбаум чета не понятно объясняет. Например он совершенно нихуя не говорит про конфигурационное пространство.
#493 #746068
Как-то раз у вас встречалось нечто вроде "ушли в стартапы за деньгами из настоящей индустрии". Если она настоящая, чего ж там денег меньше? Знаете, тут уже недалеко до другого анекдота "может, с них за вход плату брать?". У ivan-gandhi как-то была ссылка на скальную вакансию где-то там, недалеко от Германии, с издевательской припиской "изменить мир задешево". Вот, это оно и есть.

Шум и пафос. Известность. За это платят. А рабу лампы, вернее - большого индустриального комплекса, который раб без этого комплекса мало что значит - можно и не платить. Куда ж он денется-то. 90ые в РФ это хорошо показали, чего стоят инженеры сами по себе. Пусть дальше занимаются серьезным делом, изобретают снижение издержек для мистера Твистера (он же - герр Херр), хозяина завода, газеты и парахода, снизит на миллион, ему дадут 1000 - от щедрот. Изобретет 3д-принтер в 80х, чтобы до масс этот принтер дошел только после 2010, когда мистер Твистер насытится. Разумеется, гитхаб тут неуместен, с ним под сукно сложно что-то сложить. Программисты обладают гораздо бОльшей автономностью. И если они вдруг мистера Твистера обманывают, обещая ему невесть что на хаскеле, то и поделом. Не обеднеет. Делиться надо.
#494 #746083
Посоны, правильно ли я понимаю, что MSVS предоставляет только хедеры и декларации функций стандартной библиотеки. А самих исходников этих функций нет?
И если я хочу посмотреть исходники, то мне нужен gcc/g++?
#495 #746085
>>746083
Да нет. Там всё есть. Правой кнопкой на инклюде и open file.
#496 #746087
>>746083
ну, видимо, да. MSVC не швабодный, поэтому реализации функций ты не найдешь. а gcc опенсурс, только в исходниках (stl например) там хуй разберешься
>>746089
#497 #746089
>>746087
хотя реализацию stl в msvc наверное можно глянуть, шаблоны же
#498 #746103
>>746083
Сам нашел. Они поставляют исходники, но к ним не получится обратиться по 'Go to definition', т.к. программы линкуются к уже готовым .dll

> (1) We ship most of the sources for the CRT with Visual Studio; you can find them in the Visual Studio installation directory under VC\crt\src.


Плюс, что забавно они сами не писали стандартную библиотеку, а тупо купили ее у Плаугера.
>>746106
#499 #746106
>>746103
а поддреживает кто?
>>746112
#500 #746112
>>746106

> Copyright (c) 1992-2009 by P.J. Plauger. ALL RIGHTS RESERVED.


> Consult your license regarding permissions and restrictions.


> V5.20:0009


С 2009 года, наверное, сами поддерживают.
#501 #746136
Cап, котаны...
class Matrix
{
private:
USI Matrix_Size;
intm;
static USI HOW_MUCH;
USI numb;
public:
Matrix();
Matrix(USI M_S);
Matrix(USI M_S,int
m);
~Matrix();
const Matrix& operator= (const Matrix&);
Matrix& operator+ (const Matrix&);
};

Matrix::Matrix(USI M_S)
{
HOW_MUCH++;
numb = HOW_MUCH;
Matrix_Size = M_S;
m = new int[Matrix_Size];
for (USI l = 0; l < Matrix_Size; l++) m[l] = new int[Matrix_Size];
for (USI s = 0; s < Matrix_Size; s++)
{
for (USI j = 0; j < Matrix_Size; j++)
{
((m + s) + j) = 0;
}
}
}

Matrix::~Matrix()
{
for (USI l = 0; l < Matrix_Size; l++) delete[]m[l];
delete m;
}

bool Matrix::operator==(const Matrix& s)
{
if (Matrix_Size == s.Matrix_Size)
{
for (USI i = 0; i < Matrix_Size; i++)
{
for (USI j = 0; j < Matrix_Size; j++)
{
if (!(
((s.m) + i) + j == ((m + i) + j))) return false;
}
}
return true;
}
else
{
return false;
}
}

const Matrix& Matrix::operator=(const Matrix& s)
{
for (USI l = 0; l < Matrix_Size; l++) delete[]m[l];
delete m;
m = new int
[Matrix_Size];
for (USI l = 0; l < Matrix_Size; l++) m[l] = new int[Matrix_Size];
Matrix_Size = s.Matrix_Size;
for (USI i = 0; i < s.Matrix_Size; i++)
{
for (USI j = 0; j < s.Matrix_Size; j++)
{
m[j] = s.m[j];
}
}
return this;
}

Matrix& Matrix::operator+ (const Matrix& s)
{
if (s.Matrix_Size == Matrix_Size)
{
Matrix buff(Matrix_Size);
for (USI i = 0; i < Matrix_Size; i++)
{
for (USI j = 0; j < Matrix_Size; j++)
{
((buff.m + i) + j) = ((s.m + i) + j) + (*(m + i) + j);
}
}
cout << "suck my eldak" << endl;
cout << buff;
return buff;
}
else
{
Matrix buff(5);
cout << "Sorry, but you can't sum this matrix! RANDOM MATRIX FOR YOU!" << endl;
return buff;
}
}
#501 #746136
Cап, котаны...
class Matrix
{
private:
USI Matrix_Size;
intm;
static USI HOW_MUCH;
USI numb;
public:
Matrix();
Matrix(USI M_S);
Matrix(USI M_S,int
m);
~Matrix();
const Matrix& operator= (const Matrix&);
Matrix& operator+ (const Matrix&);
};

Matrix::Matrix(USI M_S)
{
HOW_MUCH++;
numb = HOW_MUCH;
Matrix_Size = M_S;
m = new int[Matrix_Size];
for (USI l = 0; l < Matrix_Size; l++) m[l] = new int[Matrix_Size];
for (USI s = 0; s < Matrix_Size; s++)
{
for (USI j = 0; j < Matrix_Size; j++)
{
((m + s) + j) = 0;
}
}
}

Matrix::~Matrix()
{
for (USI l = 0; l < Matrix_Size; l++) delete[]m[l];
delete m;
}

bool Matrix::operator==(const Matrix& s)
{
if (Matrix_Size == s.Matrix_Size)
{
for (USI i = 0; i < Matrix_Size; i++)
{
for (USI j = 0; j < Matrix_Size; j++)
{
if (!(
((s.m) + i) + j == ((m + i) + j))) return false;
}
}
return true;
}
else
{
return false;
}
}

const Matrix& Matrix::operator=(const Matrix& s)
{
for (USI l = 0; l < Matrix_Size; l++) delete[]m[l];
delete m;
m = new int
[Matrix_Size];
for (USI l = 0; l < Matrix_Size; l++) m[l] = new int[Matrix_Size];
Matrix_Size = s.Matrix_Size;
for (USI i = 0; i < s.Matrix_Size; i++)
{
for (USI j = 0; j < s.Matrix_Size; j++)
{
m[j] = s.m[j];
}
}
return this;
}

Matrix& Matrix::operator+ (const Matrix& s)
{
if (s.Matrix_Size == Matrix_Size)
{
Matrix buff(Matrix_Size);
for (USI i = 0; i < Matrix_Size; i++)
{
for (USI j = 0; j < Matrix_Size; j++)
{
((buff.m + i) + j) = ((s.m + i) + j) + (*(m + i) + j);
}
}
cout << "suck my eldak" << endl;
cout << buff;
return buff;
}
else
{
Matrix buff(5);
cout << "Sorry, but you can't sum this matrix! RANDOM MATRIX FOR YOU!" << endl;
return buff;
}
}
>>746137
#502 #746137
>>746136
пиздец я уебан...
#503 #746139
http://pastebin.com/RW8E8uxt Вот короч, сосет хуй на перегрузке =
>>746145>>746166
#504 #746145
>>746139
И чо?!
#505 #746166
>>746139
Пиздец ты понаписал говна.
Во первых, ты проебался в операторе +, у тебя возвращается ссылка на локально созданный объект (читай иногда предупреждения; компилятор тебе нахуя?).
Во-вторых, в присваивании у тебя почему-то Matrix_Size присваивается внутри цикла. Нужно по идее перед тем, как выделять память для новой матрицы, перед строкой 73
>>746172>>746205
#506 #746172
>>746166
Нафига ты ему это написал.
Пусть пойдет нахуй со своей лабой да и всё.
>>746205>>746229
#507 #746187
>>746047
Так что? Норм или нет?
>>746199
#509 #746205
>>746166
cпс
>>746172
лол
>>746229
#510 #746229
>>746172
Вот этого двачую.

>>746205
Дежурно пошел нахуй.
#511 #746252
Я продолжаюсь свое знакомство с бустом, интересная штука:
void mainCycle() {
------{{{
Object->Socket->async_write_some(buffer(Object->buff, 5), boost::bind(&server::on_write,this, _1, _2));
------}}}
}
void on_write(const boost::system::error_code& error, std::size_t bytes_transferred) {
//never calls
}

само создание сокета:
c->Socket = new ip::tcp::socket(this->Service);
Acceptor->accept(
c->Socket);

асинхронно записываю 5 байтов
по логике буста должен вызываться on_write() - но в итоге ничего не вызывается, в чем может быть проблема?
#512 #746253
Является ли Python всего-лишь синтаксическим сахарком над C++?
>>746254
#513 #746254
>>746253
Есть Cython, который переводится в C++-код и затем компилится. Вот его точно можно назвать сахарком, хотя там не все фичи языка есть.
#514 #746258
Являются ли шаблоны Степанова всего-лишь попыткой создать подобие динамической типизации с помощью костылей?
>>746284>>746349
#515 #746275
Посоны, посоветуйте, пожалуйста, схему подстветки кода для студии, чтобы визуально сразу было ясно где у меня указатели, где ссылки, а где обычные переменные.
>>746282
#516 #746282
>>746275
Все один хуй идентификаторы. Студия вряд ли их различает.
#517 #746284
>>746258
Динамическая типизация с шаблонами вообще не связана. Шаблоны - средства для генерации кода.
#518 #746286
Подскажите пожалуйста, я недавно изучаю пдюсы, но не совсем понял как считается медиана:
temps[temps.size() / 2]
Т.е. берётся вектор temps... А дальше я не понял.
Просто, я знаю что если в скобки поставить номер значения вектора, оно его и выведет. А если значение делить на 2 - надо сортировку делать тогда, верно:
>>746288>>746290
#519 #746288
>>746286
Сортировку не надо. Погугли алгоритм, на основе быстрой сортировки. Он это за O(logn) делает.
>>746291
#520 #746290
>>746286
ну или
std::sort(temps.begin(), temps.end())
>>746293
18 Кб, 661x396
#521 #746291
>>746288
И еще подвопрос, что не так в коде? Вроде, по учебнику делаю. Что-то с сортом не так.
>>746293>>746294
#522 #746293
>>746291
>>746290
Вопрос отпал.
#523 #746294
>>746291
скрин с книги можно?
>>746295
#524 #746295
>>746294
Я с вашей с оп шапки делаю.
>>746296
#525 #746296
>>746295
И что за книга?
>>746298>>746299
#526 #746298
>>746296
Printsipy_I_Praktika_S_Ispolzovaniem_C_-_2015
>>746300
#527 #746299
>>746296
С шапки скачал же.
#528 #746300
>>746298
Пофиг.
Ну ты это. Не сортируй то на каждой итерации.
Да и сумму можешь так посчитать
sum = std::accumulate(temps.begin(), temps.end())
>>746302>>746311
#529 #746302
>>746300
Хорошо, спасибо. А у вас нет конфы, там?
>>746303
#530 #746303
>>746302
Сначала книжку дочитай.
>>746306
#531 #746306
>>746303
Ну она довольно большая. Уйдёт не менее месяца на это.
#532 #746311
>>746300
Странно, пишет что аккумулейт не найдён. Хотя я сделал #include <numeric>
>>746313
#533 #746313
>>746311
Я забыл init value
sum = std::accumulate(temps.begin(), temps.end(), 0)
>>746319
#534 #746319
>>746313
Спасибо, теперь работает. Как я понял, это лучший метод получить сумму с вектора? Лучше чем через вышеупомянутый метод?
#535 #746349
>>746258
Я считаю, что единственно верное их применение.
#536 #746406
cуп
тут прошел слушек что Кнут -- херня без задачь и надо читать иное.
пруфы и авторов прошу итт..
>>746415
#537 #746415
>>746406
Кнут отличная вещь, но без определенного уровня подготовки осилить его будет очень тяжело. Как учебник по алгоритмам, как его иногда советуют, не подходит вообще. Для этого лучше взять того же Кормена или Седжвика. Плюс есть лекции на курсере и ocw.
>>746416
#538 #746416
>>746415
у меня есть 2 года стажа цпп + лекции по алгоритмике ~~хуёвые~~
алгоритмики не хватает. анон, что читать?
>>746417
#539 #746417
>>746416
Седжвика, лучше в оригинале
>>746420
#540 #746420
>>746417

>Седжвика


надеюсь он не индус и пишет на ангельском чайку тебе анонас
#541 #746617
>>736493 (OP)
Поясните разницу между std::move и std::forward.
Правильно ли я понял, что std::move только для rvalue ссылок, а std::forward для rvalue и универсальных и он пытается преобразовать тип ссылки к rvalue, если передана rvalue для приемника?
>>746646>>746662
#542 #746646
>>746617
Что такое rvalue ссылка?
>>746649
#543 #746649
>>746646
Почитай про move semantics.
#544 #746662
>>746617
move кастит строго к rvalue, а std::forward кастит к реальному типу универсальной ссылки.
>>746664
#545 #746664
>>746662
Спасибо. Значит понял относительно правильно.
#546 #746824
Есть какая-нибудь годная статейка про исключения для ньюфагов? Никак не освою когда и где их использовать.
>>746865
#547 #746865
>>746824
Бешено двачую.

Вот это пример из Интернета:
void func()
{
try
{
throw 1;
}
catch(int a)
{
cout << "Caught exception number: " << a << endl;
return;
}
cout << "No exception detected!" << endl;
return;
}

Дерьмовый пример или я тупой (да, я туповат, чего уж). Вот есть у меня такая функция:

QString function(const QString & name_your_mother) {

QString penis = "penis";

return message = name_your_message + penis;
}

Как мне написать исключение, чтобы появлялась ошибка при передачи как аргумента строки "my mama"? Если в поможете я отправлю вам лучшую картинку, что у меня есть! Хоть это и мелочь, но правда помогите пожалуйста.
#547 #746865
>>746824
Бешено двачую.

Вот это пример из Интернета:
void func()
{
try
{
throw 1;
}
catch(int a)
{
cout << "Caught exception number: " << a << endl;
return;
}
cout << "No exception detected!" << endl;
return;
}

Дерьмовый пример или я тупой (да, я туповат, чего уж). Вот есть у меня такая функция:

QString function(const QString & name_your_mother) {

QString penis = "penis";

return message = name_your_message + penis;
}

Как мне написать исключение, чтобы появлялась ошибка при передачи как аргумента строки "my mama"? Если в поможете я отправлю вам лучшую картинку, что у меня есть! Хоть это и мелочь, но правда помогите пожалуйста.
>>746868
#548 #746868
>>746865
Блин.

QString function(const QString & name_your_mother) {

QString penis = "penis";

return message = name_your_mother + penis;
}

Прошу извинения за мою опечатку.
>>746870
#549 #746870
>>746868
assert поставь. Вообще исключения не нужны.
>>746896
35 Кб, 600x596
#550 #746879
Щас бы перекатиться
46 Кб, 476x604
#551 #746896
>>746870
Спасибо большое. Твое решение пока мне кажется хорошим. Почему ты считаешь, что assert лучше исключений? Кроме конечно простоты реализации, здесь твое решение классное. Просто интересно. Для использовании в качестве аргумента в будущих спорах с начальником
>>746901>>747049
#552 #746901
>>746896
Исключения запутывают код и они достаточно дорогие в плане производительности. В плюсах их использование не поощряется.
assert разворачивается просто в проверку условия и, в случае если условие не выполняется, то в stderr выводится сообщение и вызывается terminate.
assert компилируется только в дебаге, в release этот код просто не попадает.
>>746908
#553 #746908
>>746901

>>assert компилируется только в дебаге, в release этот код просто не попадает.


Я правильно понимаю, что в release этой проверке уже не будет? Это проверка для программиста, но не для пользователя, верно? Но если мне необходимо запретить именно пользователю вводить неправильные данные?
#554 #746911
>>746908
Именно так.
Если тебе необходимо запретить вводить пользователю неправильные данные, то пиши явную проверку а-ля
If(data_is_wrong) {
show_message("Чо ты мне втираешь какую-то дичь? Пшел нахуй!")
return 1;
}
#555 #746935
>>746908
В этом случае кидай идиоматически правильным будет выбросить исключение, например такое:
http://en.cppreference.com/w/cpp/error/invalid_argument
>>746938
#556 #746938
>>746935
Возврат объекта, представляющего ошибку, был бы норм, если бы в C++ можно было бы возвращать несколько значений или, если бы он был бы динамически типизированным.
show_message(...) - можно делать только в функциях расположенных ооочень высоко.
#557 #746943
>>746908
Вкуривай вообщем исключения(обработка ошибок - одна из самых выжных и сложных вещей). Это точно пригодится как минимум при работе с чужим кодом.
>>746963
#558 #746963
>>746943

>вообщем


бля, да ты гонишь.

А по теме, пусть читает про общую обработку ошибок, exception safety и exception neutral. В целом, этого достаточно.
#559 #747049
>>746896
В языках без GC исключения опасны так как они прерывают "нормальное" выполнение программы и могут приводить к разной хуйне (утечкам). Безопасное использование исключений требует определенных знаний, использования специальных идеом (правил) программирования, например raii. Многие препочитают просто не ебатся с ними вообще, например гугл в гайдлайнах не рекомендует их использовать.
>>746908

> запретить именно пользователю вводить неправильные данные?


Это ущербная практика в любом ЯП. Нормальные люди не программируют бизнес логику на исключениях. Для проверки ввода пользователя у тебя должен быть специальный код, и в случае неправильного ввода он должен "обычным" способом сообщать кому следует, без разницы используешь ты исключения или нет. Исключения предназначены для обработки исключительно исключительных хе хе хе ситуаций. Там к примеру процесс внезапно не смог прочитать/записать в файл (причем первоначальная проверка наличия этого файла и возможности записи должна проводится вне исключений, "обычным" кодом а исключениями покрыта уже дальнейшая работа с файлом), достучаться до сокета который до этого отвечал и т.п.
#560 #747095
Как разобраться в чужом спагетти-коде? Есть ли какие-нибудь хитрости? У кода нет документации и нет туториалов. Код писали несколько европейских профессоров и пара десятков аспирантов в течении ~15 лет с перерывами. Сейчас код забросили.
#561 #747106
>>747095
Переписывай
>>747117
#563 #747148
>>747095
Разбираться в коде, который описывает предметную область, не зная самой предметной области - дело бесконечное. Если изучишь сам предмет, разобраться в коде не составит особых трудностей.
#564 #747401
Есть ли в студии опция записи последовательности шагов, которые прошла программа под отладчиком?
#565 #747724
Какие есть отладчики хорошие, кроме встроенного в студию?
>>747727
#566 #747727
>>747724
чем он тебе не угодил?
#567 #747751
>>736493 (OP)
Microsoft Visual Studio
Скачал, с офф майкрасофта, но там 2012, в ОП посте 2015.
>>747756>>747762
#568 #747756
>>747751
msvc 2015. Первая ссылка в гугле. Ставь 2015, там стандарт С++11 реализован.
>>747766
#569 #747762
>>747751
Если ты новичок, то особой разницы какую версию студии ставить нет. Скорее всего тебе нафиг не нужен ни новый стандарт, ни новые свистоперделки. Плюс в новых версиях студии легко могут перестать собираться старые проекты или поломаться бинарная совместимость, если ты компилируешь плагин для какого-то дерьма.
мимо сижу в 2010 студии и мне норм
>>747778
26 Кб, 500x334
#570 #747766
>>747756

>там стандарт С++11 реализован

#571 #747778
>>747762
Помоему лучше сразу вкатываться в новый стандарт, по сравнению со старым много удобных нововведений, помимо самого синтаксиса еще куча полезного в STL.
#572 #747785
Есть ли в студии быстрая кнопка "вернуться назад"? Т.е. я нажал "Go to definition", а теперь хочу вернуться обратно на ту строку откуда я это сделал?
>>747789>>747813
#573 #747789
>>747785
Кнопку не нашел, но нашел окно Bookmarks.
#574 #747813
>>747785
Там же можно не перейти к определению, а просто показать его.
#575 #747844
Тем временем:
https://icpc.baylor.edu/scoreboard/
Порадуемся за ленинградцев.
>>747879
#576 #747879
>>747844
Похуй.
#577 #747895
Допустим у меня есть структура typedef struct foo{...}bar;. У нее внутри массивы, char, uint и прочее.
1) Как мне сделать ее дамп памяти?
2) Можно ли как-нибудь в автоматическом режиме привести типы всех ее элементов и распечатать их значения?
>>747913>>747918
7 Кб, 941x80
#578 #747913
>>747895
Программисты -- это, определенно, черви-пидоры. Не понимаю, как можно было не написать библиотеку для этого.

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

Вот так вы и пишете свои программы, ироды.
#579 #747918
>>747895
Гугли boost рефлексия. Или просто c++ рефлексия
#580 #747951
#include"std_lib_facilities.h"
int main{}
{
cout<<"Hello, World!\n";
return 0;
}

//Гляньте что накодил поцаны.
>>747967
#581 #747967
>>747951
НЕ работает. Онлайн компилятор ругается.
>>747968
#582 #747968
>>747967
int main{}
{
чет скобок дофига
>>747974>>747977
#583 #747974
>>747968
Все по книге же, ну.
>>747978
#584 #747977
>>747968
Все проблема решена, онлайн компилятор не осилил просто.
#585 #747978
Пиздец Страуструп плодит раковых больных с помощью этого:
http://www.stroustrup.com/Programming/std_lib_facilities.h
Всегда подозревал, что фейковое интервью IEEE было нефейковым и он это все делает СПЕЦИАЛЬНО.
>>747974
Тебе нужно написать:
int main()
{
}
#586 #747981
>>747978
http://codepad.org/Soylk7a6

А вот попробуй замени. В VS хз как.
#587 #747984
>>747981
std_lib_facilities.h
файл не стандартный. Как он тебе его найдет?

>>747978
Суровая обертка, особенно над string
58 Кб, 822x473
#588 #747993
>>747978
И может это не Страуструпа вина. Тут такие шрифты, что не понятно, круглая там скобка или нет.
#589 #747994
#591 #748006
Сап, крестоносцы, давно не видились.
Расскажите, как вы живёте с правилом пяти?
Работает ли правило нуля в наследовании?
>>748030
#592 #748030
>>748006

>Расскажите, как вы живёте с правилом пяти?


норм

>Работает ли правило нуля в наследовании?


че за хуйня?
>>748032>>748033
#593 #748032
>>748030
загуглил и ебал я в рот правило нуля.
#594 #748033
>>748030

> правило нуля


Не определяй хуиты из пятёрки/тройки и не выёбывайся.

При наследовании то один хуй надо бы определить явно виртуальный деструктор, а за этим радостно шагает вся пятёрка.
>>748038
#595 #748038
>>748033

>а за этим радостно шагает вся пятёрка


нихт. Пятерка - это конструктор по умолчанию, конструктор копирования, оператор присваивания, move-конструктор, move-оператор присваивания
>>748047
#596 #748039
>>737872
Ты бы еще поныл что пальчик болит.
#597 #748045
Сап, аноны. Есть одна задача, просить решить просить не буду, нужен совет по алгоритму.
"Дана строка в миллион символов, найти две одинаковых подстроки максимальной длины. Любых."
Просидел дофига, никак не пойму что да как. В плюсах недавно.
>>748052>>748084
#598 #748047
>>748038
То есть я могу просто оставить пустой виртуальный деструктор и ссать с потолка на все эти дефолты, что я наплодил?

Спасибо, няша :3
230 Кб, 1162x1020
89 Кб, 972x328
#599 #748052
>>748045
Проблема не в языке, а в том, что ты не шаришь алгоритмы на строках.
>>748610
#600 #748084
>>748045
Суффиксные деревья тебе в помощь. Решает именно эту задачу эффективно. Но это сложная поебота, придется покурить изрядно.
>>748576>>748610
#601 #748258
>>736493 (OP)
А аккаунт в студии надо создавать? Просто при старте предложили.
Мимоновичок.
istreamiterator передача в функцию #602 #748450
Аноны помогите плиз!
суть такова: я создаю итератор потока для файла. в main все нормально работает (инкрементируется). передаю как параметр в функцию, нихрена не инкрементируется!
вот код http://pastebin.com/XMVGQYRD
знающие аноны, помогите, пожалуйста! уже весь день эту хрень пытаюсь отладить
>>748451
#603 #748451
>>748450
Выражение "минимальный пример" вам о чем-нибудь говрит? Алсо, есть идеон.
>>748457
#604 #748457
>>748451
извиняюсь, вот сделал получше.
http://pastebin.com/dA882Ta0
тут вроде суть передана
Помогите!
>>748461>>748466
#605 #748461
>>748457
А по ссылке если?
void incr(istream_iterator<int>& file_iter)
>>748470
#606 #748466
>>748457
Я нюфаня в крестах, но твой пример напечатал два раза строку. Пикрилейтед. В файл я записал рандоные строки. Что твой алгоритм делает я не знаю. Также я удалил нафиг все лишние хедеры и оставил только:
#include <iostream>
#include <fstream>
#include <iterator>
>>748467>>748470
1 Кб, 281x51
#607 #748467
#608 #748470
>>748461
>>748466
блин, бред какой-то, что я скинул последнее и у меня вроде работает, а в основном алгоритме (сортировка слиянием для файла), почему-то не работает.
ща буду разбираться
>>748477
#609 #748477
>>748470
Какие хоть ошибки тошнит?
>>748481
#610 #748481
>>748477
ошибки не выдает, просто неправильно работает.
он первое значение выводит, итератор имеет нормальный адрес. после инкремента он пишет что значение такое же осталось и адрес NULL почему-то, но выводит значение(то же самое, не инкрементированне)
>>748495
103 Кб, 624x541
#611 #748495
>>748481
вот кусок кода
incr работает нормально
distance на 16 строке работает исправно
distance на 20 строке работает не исправно

что за бред не пойму.
на 19 строке копиконтруктор вроде такой же как в incr, должен нормально работать

а distance не мог проинкрементировать мой итератор?
>>748501
#612 #748501
>>748495
добавил distance в incr тоже перестала нормально работать -_-
т.е. после distance почему-то все ломается
>>748512
74 Кб, 604x336
#613 #748512
>>748501
вот картинка...
>>748551
#614 #748551
>>748512
std::distance
If InputIterator is not at least a forward iterator, first and any iterators, pointers and references obtained from its value may be invalidated.

Итератор становится невалидным. Делай std::distance над копиями.
>>748607>>748611
#615 #748576
>>748084
оно за n работает?
>>748921
#616 #748607
>>748551
не получается...
>>748613
#617 #748610
>>748052
>>748084
Спасибо!
#618 #748611
>>748551
ваще все плохо
http://stackoverflow.com/questions/16373420/distance-between-istream-iterators
че делать :D
получается только юзать контейнеры придется?
#619 #748613
>>748607

>не получается...


Ты заебал. Сделай сначала без итераторов, а потом улучшац
#620 #748621
>>748611
Как ты копию итератора делаешь? Давай код
>>748636
#621 #748623
>>748611
В догонку - distance у тебя правильную длину возвращает?
>>748636
#622 #748627
>>748611
И да, я не пользуюсь плюсовыми потоковыми файлами, файловый поток fi в результате вызова distance не перематывается ли в конец? Может надо переместить в начало.
>>748636
#623 #748636
>>748621
istream_iterator<int> isiter(fi);
так. как по другому? ну или через =, не суть же
>>748623
>>748627
правильную длину возвращает. на SO написали что нельзя потоковые итераторы назад переместить никак, так как они InputIterator

думаю теперь контейнер (вектор) юзать.
жалко, с потоками бы круто вышло, если бы получилось, но я уже ниче не могу придумать лучше, а было бы неплохо эту прогу сдать завтра преподу.
>>748931
#624 #748681
Чет не нашел этого в Гугле:
Где та палата мер и весов, в которой закреплены четкие и конкретные значение размера в байтах для встроенных типов short, int, long для каждого конкретного режима x86 (64/32/16/other?), а еще для всяких армов и прочих архитектур.
>>748751
#625 #748751
>>748681
В файле limits.h твоего компилятора
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
>>748767
sage #626 #748767
>>748751
Благодарю. А существуют реальные примеры такого, когда для одного режима x86 разные компиляторы давали бы разный размер int, например.
>>748769>>748867
#627 #748769
>>748767
Извиняюсь, за прилипшую сажу.
Хотя в тонущем это уже не актуально.
#628 #748803
Запилите стишок и перекат.
#629 #748841
Как в дебаггере студии смотреть переменные в куче?
73 Кб, 598x331
#630 #748867
#631 #748921
>>748576
Да, оно работает за O(n)
#632 #748931
>>748636
Мне лень проверять, поэтому немного с дивана.
Я вот чего-то не уверен, что копирование istream_iterator'а корректно. Итератор, как абстрактная структура данных -- это такой объект который указывает на элемент внутри коллекции, может его вернуть и сдвинуться. Когда у нас входной поток и существует два итератора на него, и один из этих итераторов сдвигается, то непонятно что должно происходить во втором итераторе. Как бы по контракту, раз мы его не трогали, он должен указывать на тот же элемент, на который указывал раньше. Но это поток, поэтому там этого элемента уже нет. Самым логичным поведением как мне кажется должна быть инвалидация второго итератора и андефайнд бехейвор. Но с другой стороны ему ничего не мешает просто читать данные из потока несмотря на первый итератор.

Короче. надо смотреть в стандарт, что мне делать лень. Может, любопытные поинтересуются.
#633 #749087
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 7 июня 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски