Это копия, сохраненная 5 мая 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
За пять лет не осилившие треды?
Да будь весь комитет мертвецки пьян,
Он протрезвел бы от такого бреда!
Нетворкинг! Модули! Разгулье корутин!
Пихаем все, фич не бывает много!
Вы намараете хэллоуворлд один,
А нам - линковщик редизайнить снова?
Как стая шелудивых псов, давно
Не знаете сомнений, сна, покоя,
Слепить мечтая из плюсов Goвно,
Чтоб впредь уж не пришлось скрипеть башкою.
Неужто мы под шелест перфокарт
И трескотню ЕС-ок вас зачали,
Чтоб вы, едва открывшие стандарт,
Влезали в пекло и права качали?
Зря тявкаете! Бьерн и мудр и строг,
Он дрянь в язык не пропустил ни разу.
Коль выждать не хотите нужный срок -
Ступайте мять удавов одноглазых.
Старший брат: >>683573 (OP)
Предыдущий: >>707568 (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: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
-
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Автор(ы) Название Год Ссылка Бьерн Страуструп Программирование. Принципы и практика использования C++ 2016 https://yadi.sk/i/Yd6KKpLBqJSUr Стэнли Липпман, Жози Лажойе и Барбара Му Язык программирования C++ 2014 https://goo.gl/kVaela Стивен Прата Язык программирования C++ 2012 https://goo.gl/z7kA8u
Другие обучающие материалы
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 |
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
>Концепты? Вам, потомки обезьян,
>За пять лет не осилившие треды?
Но они и правда нужны. Нужнее, чем нетворкинг, фейлсистем и даже чем треды! Типы и работа с ними — это фундамент языков.
Five years later, he has not mastered multi-threading?
Yes, if all drunk as Cuba Committee,
It would have sobered the hype!
Red! Modules! Korutin drink!
PIHA all the features does not happen much!
You namaraete hellouvorld one,
And we are - again linker redesign?
Like a pack of mangy dogs for a long time
You know, the question of the dream vacation,
Blindly dreaming about the benefits of shit,
Continue There grinding head.
Of course, the whisper of a deck of cards
And EU-Ok you do hurt,
For you, only that the right to open
In order to go to hell, and deflected to the right?
In vain did the barking! Bjorn and wise and important,
This is to fuck in a language that once was lost.
Kohl does not want to wait for the right moment -
Go to amass one snake eyes.
Нужна пикча со Страуструпом в стиле "окружён, но не сломлен".
Эмм, за что плачу?
Если ты пишешь один, то можешь пользоваться бесплатной версией. Покупать надо если в твоей компании будет работать больше пяти человек.
Спасибо
К следующему юбилею подготовишь стишок на английском?
миможабокодер
в 20ом
НЕ ПРИШЛИ К ОБЩЕМУ ПОНИМАНИЮ
Всё. Понял.
Коль Мертвецки.
0) Gcc+текстовый редактор. Нахуй IDE.
1) Netbeans.
2) Eclipse.
3) Code::blocks.
удваиваю
Ещё нет.
Ааа, лев. Понял.
Если это невозможно, то как лучше реализовать это?
Нужно создать матрицу в отдельном файле в виде класса, что собственно я и сделал, но в дальнейшем необходимо использовать ее в другой функции, описанной в майн. Помимо этого в эту функцию нужно передать размерность матрицы
ты немного не понял меня.
Мне нужно создать матрицу в классе, находящимся в Matrix.h, где пользователь вводит размер матрицы и там же она создается. для этого у меня реализована функция Create();
и в main я пишу
Matrix Data;
Data.Create();
Data.OutPut();
на выходе получаю рабочую матрицу, все заебись, но теперь мне нужно работать с этой матрицей в main не менять ее значения, а просто иметь к ней доступ . Даже элементарно вывести ее через майн, а не через Data.OutPut();
Но я этого сделать не могу, потому что память под нее я выделяю в классе, объявляю там же и в этом же классе пользователь вводит ее размер.
По идее, мне надо ее как-то вернуть из класса. Возможно я не понимаю чего-то
В дальнейшем мне нужно иметь доступ к data. Я опишу функцию в main, которой нужна матрица data и ее размер (employee х position).
Т.е. у меня будет функция, которая принимает значения data, employee, position
Или сделай private члены в классе public, или сделай методы, которые эти данные будут изменять/читать, ака геттеры/сеттеры.
friend. Либо data сделай public. Либо метод
int getData()
{
return data;
}
Деструктор добавь. А то у тебя утечка.
Алсо, непонятно, зачем тебе указатель на указатель. Сделай одномерный массив и обращайся [i*width + j] к её элементам.
сделал data public. Теперь в майн все работает, но как ее правильно передать в функцию?
Все, разобрался. Спасибо
Ой иди в пизду. Пиздец тупой.
>Вопросы по синтаксису идут на хуй
>все треды на 80% состоят из вопросов типа "как передать переменную из класса в функцию"
Нет.
библиотеки изучай
Ну моча как лимончик на вкус, а говно как земелька.
Какого хуя вы жабин пулл реквест не принимаете?
https://github.com/pr-hats/2ch.hk-pr-Hats/pull/5
Это не лаба, я учусь по учебнику Страуструпа с шапки. У вас тут помогают же, нет?
>716039
>Это не лаба, я учусь по учебнику Страуструпа с шапки. У вас тут помогают же, нет?
Обращайся почаще к документации на cppreference. Ее же для тебя и пишут
>>716062
Ну я оттуда и взял инклуд алгоритм:
http://www.cplusplus.com/reference/algorithm/sort/
Я тут почитал что он пишет, сорт не работает с double?
Ты не правильно вызываешь std::sort по твоей же ссылке есть примеры использования, пусть ты текста не понимаешь.
Просто, в учебнике так.
Вроде разобрался, надо было так:
std::sort(temps.begin(), temps.end());
А где твоя версия книги? В шапке?
Неужели нет долбанного фриланса для софтовиков, я уже не знаю за что мне взяться, везде сраные индусы, везде анальные ограничения. Не хочу сидеть в офисе и сосать у босса, я могу писать мелкий софт любого характера хоть по 10 баксов за проект. Где найти биржу или людей? Неужели 10 баксов раз в 2-3 дня - слишком много для обычного человека?
Я только начал изучать c++, написал в консоле калькулятор.
В функции main весь код калькулятора. Как сделать её многоразовой? Калькулятор просчитывает одно действие, выдаёт ответ, а затем работа функции завершается.
По ссылке текст кода, если кому интересно.
http://pastebin.com/pR9X0YFS
Прочитай первые десять страниц любой книжки по с++.
Это уже даже не смешно.
Тот скриншот про компиляцию в Visual Studio уже даже не кажется фейковым.
Модули реально нужны, а типобезопасность у темплейтов можно и сейчас более-менее навелосипедить.
Перед ретурном добавь main();
Да можно и модули навелосипедить, покушать там pimpl и заныкать макросы в анонимные неймспейсы, а ещё написать constexpr функцию которая будет заменять все точки на слеши и сувать всё в кавычки, назвав её "import".
В шапке указаны только книги и два ютьюб-курса одинаковой степени полезности. В книгах много воды, в курсе слишком мало, хотелось бы на самом деле, что-то среднее.
"Начинающий - знает основы синтаксиса и STL библиотеку. Умеет писать лабы, что давали в универе" и т.д.
Знающие аноны-программисты можете заполнить такой список? Я только в самом начале пути и было бы интересно послушать опытных анонов.
Нельзя заполнить такой список так, чтобы он был корректным - всё зависит от конкретной предметной области.
Хм.. Но ведь есть какие-то базовые вещи, азы которые знают все программисты? Можете их расписать? Пока у меня складывается впечатление, что вся книга Стэнли Липпмана - это тот минимум, что нужно знать. А книга у него довольно объемная, страниц на тысячу.
Вот например. Знания уровня бичевого стажера.
https://www.google.com/about/careers/students/guide-to-technical-development.html
>Да можно и модули навелосипедить
Компиляция-то от этого не ускорится. Суть модулей, чтобы хидеры не парсить стотыщ раз подряд.
Спасибо за ценную ссылку. Первое впечателние, что это шутка - столько знать. Но кажется я долго смотрел на жизнь в розовых тонах. Буду заделывать бреши в своем образовании.
>Компиляция-то от этого не ускорится. Суть модулей, чтобы хидеры не парсить стотыщ раз подряд.
Ты похоже не знаком с pimpl и предкомпилированными заголовками. Модули велосипедят уже 20 лет, и всем похуй.
Автоматически ты в пимпл все не сконвертишь, плюс не все в принципе можно сделать пимплом. А типизацию у темплейтов можно худо-бедно и сейчас накостылить, причем не слишком сложно.
Это была ирония. Шутка.
мы создаем истанс класса а, и вызываем метод, который в свою очередь создает инстанс класса к
несмотря на то, что метод закончил работу, деструктор класса к не вызывается
потом, мы запоминаем адрес пременной типа дабл и удаляем класс а
Потом выводим то, что находится по ссылке, выводится то же число, что и было введено констурктором к - 9.11
Далее, второй случай, допиливаем дестурктор а, где пишем delete k; - все равно, 9.11 остается в памяи процесса
Так вот, вопрос, как рассматривается участок памяти, в котором находится число 9.11 в первом и во втором случае, это все еще алоцированное пространство, или уже нет?
Анасики, ждете сопрограммы?
Они ведь в итоге будет в виде async/await или вообще не будут что там в стандарте, брат?
Уже не будут. От слова совсем.
Не решили нихуя, комитетчики посчитали, что мейнстрим — async/await некошер, а они единственные могут сделать правильно, лол. Юзайм буст, в общем, как всегда.
Идея решения такая.
1) делаем map<string, double> base;
2) как-то забиваем в поле string имя-фамилию, в double, среднее значение
3) выводим 3 худших значения
Не знаю как сделать 2 и 3. Т.к. не знаком с мапом. Помогите мне! Прошу!
Джо Саттис.
> int z[100];
> delete[] z;
r u Sirius?
На вопросы не отвечу, так как не смог понять, кто там на ком сидел.
>1) делаем map<string, double>
map сортирует по первой компоненте. На случай, если ты хочешь эффективно доставать оттуда по минимальному баллу.
С другой стороны, map<double,string> не катит из-за возможных одинаковых средних баллов.
Черт, а как тогда освобождать память таких массивов? Просто, без квадратных скобок?
Суть в том, что я пытаюсь понять, как воспринимается память системой под которую был или не был вызван деструктор.
Есть класс а, в этом классе - подкласс к. Как будет расцениваться выделенная под класс к память если вызывать деструктор класса а с деструктором класса к и без
Никак не освобождать, память под 100 элементов выделится при создании класса и освободится при уничтожении.
Ты же не выделял с помощью new, зачем вызывать delete тогда.
Я не понимаю как заносить туда. Вроде так.
base.insert (pair<string, double>(str, num));
Но как мне взять число если я полностью считал строку?
>Я не понимаю как заносить туда.
string student_naem;
base[student_naem] = mark;
Оператор [] у std::map создаёт новый ключ при обращении. если его ещё не было.
Всмысле не выделял, я динамически не выделял
Создание переменной - аллоцирование памяти под нее, разве нет?
Ясно, а откуда mark тогда взять? Как из строки мне выделить 3 оценки без велосипеда?
А, там всё в одну строку.
Короче, считываешь всю строку с помощью getline.
Оборачиваешь строку в istringstream и вытаскиваешь из stringstream строки с фамилией именем и оценки
см. http://stackoverflow.com/questions/1883056/stdstringstream-to-read-int-and-strings-from-a-string
>удаляют
Я тут и пытаюсь понять, как это все устроено, что и как нужно удалять.
Значения остаются в памяти, их можно спокойно просмотреть по поинтеру. Откуда мне знать что память уже релоцирована, явного деструктроа класса к я же не вызывал?
При удалении память просто помечается как свободная, все значения в памяти остаются (и могут быть прочитаны) пока память не будет переиспользована для чего-то другого. Поэтому важную инфу в памяти нужно вручную затирать нулями или чем-то случайным. Ситуация как с файлами на жестком диске, если ты понимаешь о чем я.
В том то и дело, что я, блядь, не удаляю память прямо, не вызываю деструкторов, вот и пытаюсь понять что с ней произойдет
В первом случае ты можешь удалить память выделеную под дабл через оставшийся указатель, все остальное утекло (хотя непереносимым пердолингом тоже можно вытащить скорее всего). В втором случае все освобождается (если правильно деструктор написал), добавь в деструктор К обнуление флоата если ты через него проверяешь. По самому факту освобождения флоат не обнулиться.
string buffer;
getline(cin, buffer);
istringstream iss(buffer);
string last, first;
int marks[3];
iss >> last >> first;
iss >> marks[0] >> marks[1] >> marks[2];
Как-то так.
Да я понимаю, что освобождение != обнуление, поэтому и спросил тут как оно устроенио
Спасибо, вроде понял
БЛЯ, КАК ВСЕ ПРОСТО, СПАСИБО!
Ток 1 вопрос, разве можно простым cout?
Я так выводил
for (auto it = m.begin(); it != m.end(); ++it)
std::cout << it->first << " : " << it->second << '\n';
http://pastebin.com/MVDxjrLK
Тогда надо стрелку на точку менять, правильно?
>>716789
Я привык, что всегда есть более компактное и эффективное, и элегантное, и гибкое решение, но я его не вижу. Вот и спрашиваю, какое оно.
Иди нахуй, сука. Заебали со своими лабами, тупые пидарасы. Сначала полгода нихуя не делаете, а потом приходите на двачик со своими имбецильными "плак плак, крестаны, помогите решить лабу) посыпаю голову пеплом)))".
А ГДЕ ТЫ 3 МЕСЯЦА НАЗАД БЫЛ, СУКА? А ЧТО ПОТОМ БУДЕШЬ ДЕЛАТЬ, А, МРАЗЬ? СВОБОДНАЯ КАССА КРИЧАТЬ? ВСЕ ПРАВИЛЬНО ПОНЯЛ?
Какой же ты пиздоглазый. Тебе не надо идти в программисты.
Макконелл, Фаулер.
Что ты блядь несешь еблан? Я пробники нарешиваю, тут задание где ассоциативные контейнеры нужны, я про них не знал, из гугли мало что понял. Логично что я спрошу у кого-нибудь и разберусь, а не буду как конч сидеть и ждать.
Да я ее прочитал уже нахуй
МНЕ ПОХУЙ БЛЯ КТО ТЫ: СТУДЕНТОМРАЗЬ С ЕБУЧИМИ ЛАБАМИ ИЛИ ШКОЛОГНИЛЬ С ЕБУЧИМ ЕГЭ. КНИГИ И ДОКУМЕНТАЦИЮ ПИШУТ ИМЕННО ДЛЯ ТАКИХ КАК ТЫ, ЧТОБ ТЫ, СУКА, ВЗЯЛ, НАПРИМЕР, ДЖОССАТИСА, ОТКРЫЛ ГЛАВУ ПРО MAP И ПРОЧИТАЛ ВСЕ НАХУЙ: И ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ, И ИНТЕРФЕЙС, И ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ, ДАЖЕ ПРО НЕБО И АЛЛАХА ТАМ МОЖНО ПРОЧИТАТЬ.
НО НЕТ БЛЯ НАДО НА ДВАЧ ИДТИ И СПРАШИВАТЬ. А ЕСЛИ ИНТЕРНЕТА НЕ БУДЕТ, ЧТО ТЫ БУДЕШЬ ДЕЛАТЬ??? А ЕСЛИ НА РАБОТУ УСТРОИШЬСЯ, ТОЖЕ КУРАТОРА БУДЕШЬ ДОЕБЫВАТЬ ПО КАЖДОЙ МЕЛОЧИ?
> А ЕСЛИ НА РАБОТУ УСТРОИШЬСЯ, ТОЖЕ КУРАТОРА БУДЕШЬ ДОЕБЫВАТЬ ПО КАЖДОЙ МЕЛОЧИ?
Ну уж как конченный даун сидеть и нихуя не понимать я тоже не буду. Для того люди и общаются на определенные темы, чтобы инфу получать. В этом нет ничего зазорного.
> КНИГИ И ДОКУМЕНТАЦИЮ ПИШУТ ИМЕННО ДЛЯ ТАКИХ КАК ТЫ, ЧТОБ ТЫ, СУКА, ВЗЯЛ, НАПРИМЕР, ДЖОССАТИСА, ОТКРЫЛ ГЛАВУ ПРО MAP И ПРОЧИТАЛ ВСЕ НАХУЙ: И ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ, И ИНТЕРФЕЙС, И ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ, ДАЖЕ ПРО НЕБО И АЛЛАХА ТАМ МОЖНО ПРОЧИТАТЬ
Бля, я прочитал примеры, прочитал про всякое и не было или я не увидел нужного мне и представь Я ПОШЕЛ НА ТЕМАТИЧЕСКУЮ ДОСКУ, В ТЕМУ ГДЕ ОБЩАЮТСЯ НА КОНКРЕТНУЮ ОБЛАСТЬ В ЭТОЙ ТЕМАТИКЕ И СПРОСИЛ ВОПРОС СВЯЗАННЫЙ С ЭТОЙ ОБЛАСТЬЮ, вот же я мудак, пиздец, как посмел, ШЕЛЬМЕЦ!
Даже если взять твои обвинения. Задание я сделал сам, мне нужно было знать только как забить данные в контейнер и все!
>Я ПОШЕЛ НА ТЕМАТИЧЕСКУЮ ДОСКУ, В ТЕМУ ГДЕ ОБЩАЮТСЯ НА КОНКРЕТНУЮ ОБЛАСТЬ В ЭТОЙ ТЕМАТИКЕ И СПРОСИЛ ВОПРОС СВЯЗАННЫЙ С ЭТОЙ ОБЛАСТЬЮ
Ты пошел на тематическую доску, зашел в тематический тред и как настоящий школотрон не прочитал шапку, в которой есть и нужные книги, и народная мудрость:
>Вопросы по синтаксису идут на хуй
>Лабы идут на хуй
В данном случае твой вопрос является чем-то средним. Пойми, бугурт здешних плюсанов не на пустом месте берется. Уже тредов так 5 приходят всякие школотроны вместе с студентотой и спрашивают то, ответы на что уже 300 раз написаны в шапке.
> Ты пошел на тематическую доску, зашел в тематический тред и как настоящий школотрон не прочитал шапку, в которой есть и нужные книги, и народная мудрость:
Читал и книжки у меня скачаны, заходил на стак, ну не нашел я, что блядь мне делать?
Да ладно тебе, братюнь, не горячись. Не всегда мы были опытными и умели искать инфу быстро. В школе этому не учат же. Я вот был в его возрасте гораздо большим долбоебом.
>>716866
Ты просто следуй паре простых рекомендаций:
1. Если твой вопрос формулируется в виде "как сделать X?", то лучше гуглить это, гуглить на английском, смотреть факи, доки, книги, стековерфлоу - что угодно, хранящее инфу, но не спрашивай, блядь, в треде. Тред должен нести пользу читающим его, а не быть забитым вопросами разного уровня глупости. Вопрос, на который есть ответ в книгах из шапки, и тем более гуглящийся, вызовет перебрасывание какашками между тобой и алтфаками, никто в результате не выиграет.
2. Если твой вопрос формулируется в виде "как лучше всего сделать X?", "посоветуйте хороший источник информации про X" etc - вот тогда смело пиши в тренд, будет польза как тебе, так и другим анонам потом.
каюсь ещё
qt fltk
http://pastebin.com/RJ6AZRJ4 - cpp
http://pastebin.com/MiF2KEaQ - h
В общем. При любом обращении к xml_writer внутри inc_block софтина вылетает.
Если где-то виднеются косяки - это "боевые раны" - уже чуть ли не брутфорсом - и по ссылке пробовал передавать и по указателю, напрямую обращаться (т.к. один хуй глобальные). Теперь вот таким макаром сделал - одна беда, не хочет и все.
Заранее спасибо
Конкретно тут не доходит до 30 строки, отдает сегфолт.
И во всех вышеперечисленных случаях тоже отдает сегфолт.
[CODE]
delete[] data;//здесь происходит пикрелейтед
data = new dial[length];[/CODE]
При компиляции. Потому что вызов конкретного метода должен замениться прыжком в эту vtable.
Учи английский, сука
http://stackoverflow.com/questions/3849498/when-is-vtable-in-c-created
>Typically, vtables are structures created at compile time (because they can be determined at compile time). When objects of a particular type are created at runtime they will have a vptr which will be initialized to point at a static vtable at construction time.
>compile time
Ну это понятно. Я не правильно выразился.
В памяти vtable появится при запуске или при создании объекта?
Понял. Сразу в памяти висит.
У тебя не инициализирован xml_writer. Для инициализации членов класса пользуйся предназначеным для этого синтаксисом.
Это актуальо вообще? Требуется где-нибудь?
При запуске.
(дубль ссылки: http://pastebin.com/RJ6AZRJ4)
Подожди, но в пятой же строке - разве не инициализация?
Он после нее и отдает адрес устройства в 21ой.
А внутри inc_block он на таком же запросе адреса падает (30 стр.), хотя xml_writer объявлен как глобальный.
Я также пытался его напрямую передать по ссылке и по указателю - ситуация аналогична.
Ты объявил локальную переменную xml_writer которую и используешь в конструкторе. А в tms::inc_block() ты пытаешься использовать член класса xml_writer который не инициализирован, судя по тому коду что ты предоставил.
И вообще, если я не ошибаюсь QXmlStreamWriter занимает 4 байта, нахуя ты пердолишся с указателем на него. Объяви его (в h файле) как QXmlStreamWriter xml_writer; а не QXmlStreamWriter *xml_writer; - он создастся и удалится автоматически.
Еще нужно не забыть удалить QXmlStreamWriter *xml_writer = new QXmlStreamWriter;
Там это все пропущено, т.к., как ты уже наверное понял, я тот еще дилетантище.
Сейчас возвращаю fille и xml_writer без указателей, попробую так.
(пропущено всм., т.к. я слишком часто все меняю)
Все, понял в чем еще косяк был. У меня еще из раза в раз пересоздавался fille (в конструкторе было new QFile).
Просто надо было setFilename вместо этого всего онанизма поставить и все.
Благодарю за помощь, удачи тебе, добрый человек.
пробни например стажировку в яде, и воообще я сам офигеваю что в hh из вакансий нет по крестам ничего, но стоит взять /dev/vi.., встать с дивана и пробовать!
оформить гитлаб/хаб
просится на работу за ничего но со стажем
решать задачи на тонкости и алгоритмы за пол наносекунды
и через годик-хуёдик вкатится в норм контору с норм зп и уже со стажем за спиной
int a, b, c;
char x;
cout << "enter a: ";
cin >> a;
cout << "enter b: ";
cin >> b;
cout << "enter operand: ";
cin >> x;
if (x == '+')
{
c = a + b;
}
else if (x == '-')
{
c = a - b;
}
else if (x == '')
{
c = a b;
}
else if (x == '/')
{
c = a / b;
}
keep_window_open();
int a, b, c;
char x;
cout << "enter a: ";
cin >> a;
cout << "enter b: ";
cin >> b;
cout << "enter operand: ";
cin >> x;
if (x == '+')
{
c = a + b;
}
else if (x == '-')
{
c = a - b;
}
else if (x == '')
{
c = a b;
}
else if (x == '/')
{
c = a / b;
}
keep_window_open();
Перегрузи оператор [] и обращайся через Data[j]. Раз у тебя ИНКАПСУЛЯЦИЯ. Чем не вариант? Или сделай поля публичными, раз у тебя там такое "здравствуй-90-е" процедурное программирование.
Ну и пара очевидных советов: запрашивать ввод пользователя внутри функции создающей матрицу -- это плохо. Это раз. Во-вторых данные лучше инициализировать внутри конструктора. Выдумывать для этого отдельную функцию Create не нужно. Вынеси в main запрос ввода размеров и передавай их как параметры внутрь конструктора.
Где ищешь лабы/курсачи? Может, поделешься местами? Понимаю, что лишняя конкуренция тебе не нужна, но я бедный студент, и кушать хочется.
Тоже тыкался по биржам, но ничего толкового не нашел. Пытался поискать какие-то тематические группы вконтактике, но они там все анально-огорожены.
есть 3 места
0 твой универ
1 типичный программист обсуждения студенты туда бегут сразу пачимута
2 итт/нюфаньтред итт я 6 тредов и видел только одну большую работу за ничего500 р вроде при коде в 800 строк минимум но думаю под сессию раки набегут ппц
найдёшь лабу в 1 и 2 -- попроси студента рассказать паре друзей бездельникам.
кеш забираю мертвыми деньгами. Хватает на пару шавух в неделю и рис с соевым соусом.
зы в планах уйти в html + py + css + js для фрилансов или стажировки пробнуть как тут >>717632
Собственно - пишу один лексопарсер для автокомплита (дада, yacc и ragel, все дела, но я велосипедист), и для построения AST приходится заниматься множественной копипастой в стиле:
Function(const std::string &name, int argc, const std::string &args) : name_(name), argc_(argc), args_(args)
...
Hui(const std::string &name, int argc, const std::string &args) : name_(name), argc_(argc), args_(args)
...
Pipiska(const std::string &name, int argc, const std::string &args) : name_(name), argc_(argc), args_(args)
Собственно, как это можно красиво завернуть списки инициализации в препроцессор/constexpr? Писать всё руками с последующим рефакторингом - слишком печально, писать отдельный скрипт для кодогенерации в 2076 - тоже некошер.
Ну, можно сделать что-то вроде такого:
template <class... Args>
Function(std::initializer_list<Args> args) {
std::tie(name, arg1, arg2, etc) = std::make_tuple(args...);
}
Не проверял, но должно работать
Писал спрашивал уже в соседнем треде, теперь и тут спрошу.
Подходят ли кресты под разработку приложений с упором на работу с tcp/ip и чтение/запись в память, работа с указателями и адресами и т.д.?
Более чем
>"здравствуй-90-е" процедурное программирование
Школьник думает, что ООП изобрели после 90-х. И что с изобретением ООП "процедурное программирование" якобы "устарело" и стало ненужным.
Да, забавно, учитывая, что весь хайп ООП - это 80-е. Но вообще он прав, а у вопрощающего пиздец.
> весь хайп ООП - это 80-е
Мне казалось (сильно в этом не копался), что всё же начало 90-х.
Открывал когда-то книгу какого-то Бутча от 94-го, что ли, года. Там было типа такого: «вот есть у нас программа-фильтр, которая считывает файл, что-то там с ним делает и выводит. Но это НИСАВРИМЕННО! Надо создать объект "файл" и объект "фильтр" и послать между ними сообщения!»
Плюнул и закрыл. Я думал это техническая литература. А оказалось — на уровне религиозных брошюрок.
Ничто не лучше и не хуже. Для чего-то больше подходит, для чего-то не подходит и всё.
ф-ф-ф-ф-функциональщина
struct Yoba { std::string name; int argc; std::string args };
A(Yoba yoba) : { yoba } {}
B(Yoba yoba) : { yoba } {}
=====================
A({"yoba", 34, "da ty yoba"});
Пишешь код, выделяешь полиморфные алгоритмы, далее оформляешь их либо в виде шаблонов, что проще, но только в статике, либо в виде интерфейсов, либо в виде, внезапно, tagged union'ов. Об объектах не думай, должны быть [полиморфные] алгоритмы, [полиморфные] структуры данных, конкретный тип полиморфизма нужно определять по месту. Лучше всего в структуре данных иметь только конструкторы и один operator(), тогда твои объекты превратятся по сути в функции на стероидах и их будет очень легко совмещать. Так как 90% кода это трансляторы одних данных в другие, такой подход тебе во многом поможет.
Кто страшится всех трудных путей - тот глупец;
Кто, познав их, не видит простого - слепец.
Раз за разом дорогу с умом выбирая;
Быстро к цели идет, обогнав их, мудрец.
Ну скорее нет, лучше посмотри в сторону ruby и php.
"Успешно контрибутил в говнорепы (список говнореп) с целью получения опыта, запилил там то-то, пофиксил несколько сложных багов, и т.д."
Мне вообще сюда?
>>719024
С ангельским у меня проблема. Я просто запутался из-за того, что QDir::currentPath() возвращает не путь к директории, где находится исполняемый файл, а на уровень выше, почему-то.
> QDir::currentPath() возвращает не путь к директории, где находится исполняемый файл, а на уровень выше, почему-то.
currentPath() возвращает текущую директорию, как очевидно из названия.
А не путь к исполняемому файлу и не "на уровень выше" его.
>Returns the absolute path of the application's current directory. The current directory is the last directory set with QDir::setCurrent() or, if that was never called, the directory at which this application was started at by the parent process.
Что понимается под parent process? Компилятор, cmd.exe, .exe моей программы все равно ничего не подходит
Добавил.
QDir::setCurrent(QCoreApplication::applicationDirPath());
Но чтобы это сделать пришлось ради этой одной строки подключать #include <QDir> в main.cpp, что меня немного напрягает, или это нормальная практика и код от этого сильно не увеличится.
И что лучше, сделать как написано выше, или в файле моего класса, где используется <QDir> подключить <QCoreApplication> и в нём установить setCurrent?
Или вообще в main получить applicationDirPath() и передать его в статический метод моего класса?
Ну, если я дважды кликнул на ехе-файле - какой это процесс? explorer.exe?
Почему тогда currentPath() возвращал путь к папке, в которой вообще нет исполняемых файлов?
И там еще второй вопрос.
>Ну, если я дважды кликнул на ехе-файле - какой это процесс? explorer.exe?
Где-то около.
> Почему тогда currentPath() возвращал путь к папке, в которой вообще нет исполняемых файлов?
Прям при запуске двойным кликом? Или всё-таки из какого-нибудь QtKreakl?
>из какого-нибудь
this. Ясно, магия.
И всё же, второй вопрос в силе.
>Но чтобы это сделать пришлось ради этой одной строки подключать #include <QDir> в main.cpp, что меня немного напрягает, или это нормальная практика и код от этого сильно не увеличится.
>И что лучше, сделать как написано выше, или в файле моего класса, где используется <QDir> подключить <QCoreApplication> и в нём установить setCurrent?
>Или вообще в main получить applicationDirPath() и передать его в статический метод моего класса?
>this
Ясно, что IDE пускает как-нибудь так:
cd ProjectDir; exec Debug/app.exe
Поэтому текущая директория оказывается "на уровень выше приложения".
> И всё же, второй вопрос в силе.
ХЗ ваще.
> код от этого сильно не увеличится
Зависит от хедера, вообще не должно сильно много увеличится. Если сильно волнуешься и нужна только одна функция можешь попробовать просто ее задекларировать, что-то типа bool QDir::setCurrent(const QString & path); главное чтобы библиотека была прилинкована. Но это так себе способ, так как в хедере может какая-то магия происходить.
а тебе не класть на размер кода? главное же размер объектников и конечного экзешника, что благополучно решает линковщик, который выкинет всё лишнее.
kbhit на линукс. Считывание нажатой клавиши и проверку нажата ли клавиша в данный момент.
Нажатие кнопки, Карл, не ввод чара. Я типа не для удержания окна, а для дела.
using namespace std;
int main ()
{
float X,Y;
cout<<"X="; cin>>X;
if (X<-2) Y=-X;
else if (X>0) Y=5-2/3X; <-----не работает конкретно это
else Y=5+1.5X;
cout <<"Y=" <<Y<< endl;
return 0;
}
спс
Давай лучше в грузчики с такой хуйнёй.
4 дня уже не сплю, наверное еще денек и всё, можно отдыхать.
Знаю, что можно
[code]
int graph = new int [m];
for(int i = 0; i < m; ++i) {
graph = new int [2];
[/code]
однако в таком случае происходит m выделений памяти, а это долго и может привести к фрагментации. Хотелось бы справиться за одно, а потом раскидать указатели, как тут
[code]
int graph = new int [m];
graph[0] = new int[2m];
for(int i = 0; i < m; ++i) {
graph = graph + i(sizeof(int)*2);
}
[/code]
однако этот код не работает
Выделение памяти под пару интов – операция на 0,5 мс даже на слабой пеке, получить фрагментацию памяти при такой хуйне можно разве что если одновременно идут какие-то массовые аллокации и то на древней ос (все современные с дефрагментирующими аллокатарами из коробки).
Если так хочется сделать максимально быстро – выделяй постранично системным апи (увеличивая m до размера, который можно выделить таким образом) и раскидывай указатели руками для удобной работы "как с двойным массивом".
int test = 7;
int fuck = (int ) malloc(sizeof(int)*test);
[/code]
graph = graph + i(sizeof(int)2);
Одна строка и годы анальных мучений...
Ты лучше сам себе попробуй повторить что ты этим кодом делаешь.
Мод уже 9 дней её игнорит хотя 6 дней назад в вашу шапку комитил. чё за хуйня? поясни что попровить
У меня есть класс, где в паблике я инициализирую матрицу (int data, size) и в этом классе всякие функции для работы с матрицей (заполнение, транспонирование и тд)
В main у меня есть функция, куда нужно передать этот КЛАСС. Не по отдельности ( класс Matrix Data, передаю Data.data, Data.size) а просто передать в нее класс, а в функции работать уже с data, size. Как это сделать? Гуглил и нихуя подобного не нашел, везде инфа про то как передавать функции из классов, а как передать полностью класс?
Boost.ASIO
>и опять один петушок начнет кукарекать ВОПРОСЫ С СИНТАКСАМИ ИДУТ НАХУЙ такие пидары отбивают все желание учить язык
Это ты петушок и пидар, раз не можешь открыть нормальную литературу и прочитать ее. Вот для кого страуструп писал книгу? Для таких, как ты. Так что пошел нахуй, чернь.
Если это задание - лаба, пиздуй к лаборантам, им за это деньги платят. Если что-то нетривиальное, то пожалуйста.
Я уже был тут, моя пидорская егэ параша. Я вроде сделал, вроде все работает. Но я думаю были пути сделать проще и быстрее, и гибче, и красивее ну и так далее
http://pastebin.com/ftu7irpx
вот про него я и говорил. Чувак, я месяц в плюсах, до этого не работал с языками, какой нахуй страуструп? Этот мудень излагает таким образом, что пошел он в пизду со своей книгой.
Покажи мне хоть одного человека, который учился по страуструпу не зная языков?
Моя задача понять азы программирования и вот один из них который я не понял, но ты же сука знаешь, однако подсказать тебе влом, вроде хуй убавится тебе от этого, зато поможешь начинающему анону. Пошел нахуй мудак
я начал с шилтда, ибо он излагает понятным и доступным языком. Это не значит, что до страуструпа не дойдет, я обязательно и его изучу, но не все сразу. Тут бля вопрос элементарный, для знающего анона, но хуй кто поможет
Знающий анон в треде: съеби нахуй с плюсов, это язык не для нюфагов. Ты только замедлишь своё развитие как программиста. Можешь поучить Си если хочется прям основ, но не надо начинать с плюсов.
Тред и без тебя забит такими муделями.
Кстати, из шапки куда-то пропало замечание, что нехуй начинать свой путь программиста с плюсов. Надо бы pull риквест отправить.
>Можешь поучить Си если хочется прям основ
Лучше взять что-то скриптовое типа питона или руби, а потом навернуть Таненбаума с его "Архитектурой компьютера".
>ну коли уж начал, нет пути назад.
Ты дурак? Тебе предстоит путь, длиной больше 500 рабочих часов из которых ты прошел максимум 40. Не страдай хуйней и иди наворачивай python.
зашел в тред попросить помощи - послали учить другой язык и забить на си. Двач такой двач
>соске не хватает фундаментальных знаний, чтобы осилить документацию
>соска жалуется на то, что отправляют учить основы, вместо того, чтобы давать ситуативные макако-ответы
Мда...
Твоя программа http://ideone.com/uAQpLz обсирается на данном примере:
12
6
14
88
100
8
35
145
4
59
2
84
666
6
Ок, я обосрался это было в шапке, извиняюсь
> Тут бля вопрос элементарный
Ты хуйню какую-то спросил. Я не думаю что кто-то вообще понял твой вопрос. В плюсах нельзя манипулировать классами как самостоятельными сущностями. Поэтому ты не можешь передать в функцию класс. Есть языки где это действительно возможно, но не в плюсах.
Передавай класс по ссылке, в чём проблема?
Думаю он пытался спросить про передачу экземпляра класса, но отсылка к питону, все же лучшее решение, чем здесь сидеть и превозмогать шилтда вместе с ним.
Начни с питона лучше.
у меня в классе есть матрица и переменные - ее размер. Мне надо передать в функцию не отдельно матрицу и переменные, а полностью класс. Это невозможно?
Закинь код.
Сумма четна когда оба числа имеют одинаковую четность, у меня есть проверка этого
Скрыл нахуй пост и не парюсь, чо ты.
upd.
Надо скобки добавить в этой строчке
if (num < m01 || num < m02 && num%2==0)
на
if ((num < m01 || num < m02) && num%2==0)
Например, при сохранении твоей структуры программы, ты можешь договориться что одно из двух чисел где ты хранишь минимумы должно быть всегда больше. Тогда в первом сравнении проверяешь четность, во втором сравнении сравниваешь с большим числом, если меньше то перезаписываешь большее число, а потом третим сравнением восстанавливаешь инвариант - проверяешь два числа (которые хранишь), и если нужно меняешь местами, чтобы большее число всегда было большим.
Или можно как-то так сделать https://ideone.com/5KiTT8
Сук, я тупорылый, спасибо
Есть такой кодес: http://pastebin.com/GUaQqdsu
Правильно ли я дополняю вектор нулями, если, например, из вектора (2, 1) в результате дополнения надо получить (2, 1, 0, 0)? Результат свёртки верный, но при вычислениях в конечных полях могут получаться совпадения.
Алсо, правильно ли передавать в convolution векторы по значению, а не по ссылке? Мне нужно, чтобы входные векторы были иммутабельными.
Всё, что по размеру больше указателя, желательно передавать по ссылке, желательно константной. Ну или использовать move семантику, опять же, при возможности и если это соответствует ситуации.
А пулл реквесты для шапки треда со стороны принимаются или нет?
плюсы, минусы, подводные камни?
есть куча способов прострелить ногу себе -- 1
не поверишь именно из-за этого и планирую
внезапно у большинства крутых фирм востребованы ток плюсы
> плюсы
Материализованные генетики, отсутствие зависимости фич языка от версии рантайма на проде.
> минусы
Плюсы нужны только вместе со специфическими знаниями из области применения разрабатываемого софта.
Можно выстрелить себе в ногу в абсолютно пустой, круглой комнате.
ru.wikipedia.org/wiki/Ссылка_(программирование)
Ссылка в программировании — это объект, указывающий на определенные данные, но не хранящий их.
передача в функцию массива например. зачем елозить весь?
или скинуть как параметр функции класс и как-то его менять там как захочешь, а не копировать и обратно скинуть
aноны.. я тоже умею гуглить за анона-школьника, прощайте уже за /dev/videoХ
Тоже верно.
здоровый сука
Ты наверное имеешь в виду, передача аргументов функции по значению и по ссылке. Если значение передается по значению, то копируется его значение, откуда и такое название. Следовательно, внутри функции своя копия данной переменной и если ты изменяешь ее внутри функции, наружу изменения не попадают. Передача по ссылке передает в функцию не копию, а саму переменную, размещенную по определенному адресу в памяти. Следовательно ты сможешь менять значение этой переменной прямо в функции и изменения вылезут наружу.
Сначала размудим терминологию: есть указатели, и есть ссылки. (разницу сам гугли, шкальник)
Ссылки нужны там же, где и указатели, просто они безопаснее. /t
Еще небыло РЕЛИЗА.
По сути сейчас мод этим заведует. Но раньше мы всегда принимали нормальные предложения по модификации шапки кроме Дейтелов агагагагаг, так что вряд ли ты встретишь копротивление.
Тю, она и так бесплатная по Dreamspark же. Алсо, если кто из анонов трогал pluralsight, поделитесь впечатлениями, будьте няшами. Я не уверен, стоит ли тратить время на них.
Как на нём создать исполняемый файл и апустить его?
man gcc
Опишу простой случай, когда у тебя один файл с исходным кодом и функцией main в ней:
g++ <имя файла с исходным кодом> -o <имя запускаемого файла>
Ага. Понял. Спасибо за ответ :).
> g++ <имя файла с исходным кодом> -o <имя запускаемого файла>
АААААА СЛОЖНААААА!!!!
Просто ведь:
make <имя файла с исходным кодом, без расширения>
>Ссылки нужны там же, где и указатели
Ссылки нужны там же, где и значения
на самом деле не так и не так
>передача в функцию массива например. зачем елозить весь?
Тут ссылки не при чём, массивы распадаются до указателей ещё со времён C.
Ах, прости, не знал про implicit rules.
не вспоминаю про эти ебаные С-массивы уже года 4. Прям с того момента, когда с этой ебатой познакомился.
>make <имя файла с исходным кодом, без расширения>
Вводить конечно проще, но не понятно, что за этим стоит, если не знаешь как работают implicit rules
#Copyright (c) 2016, /dev/videoX простите меня уже
#All rights reserved.
#
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#* Neither the name of oilwater nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
CXX = clang gcc-48 или что там у тебя
OBJS = main.o etc..
CFLAGS =
LDFLAGS =
LIBS =
TARGET =my_cancer_programm_kokoko
$(TARGET):$(OBJS)
$(CXX) $(OBJS) $(CFLAGS) $(LDFLAGS) $(LIBS) -o $(TARGET)
all:$(TARGET)
clean:
rm $(OBJS)
#Copyright (c) 2016, /dev/videoX простите меня уже
#All rights reserved.
#
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#* Neither the name of oilwater nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
CXX = clang gcc-48 или что там у тебя
OBJS = main.o etc..
CFLAGS =
LDFLAGS =
LIBS =
TARGET =my_cancer_programm_kokoko
$(TARGET):$(OBJS)
$(CXX) $(OBJS) $(CFLAGS) $(LDFLAGS) $(LIBS) -o $(TARGET)
all:$(TARGET)
clean:
rm $(OBJS)
При компиляции через g++ руками все работает нормально, на ideone тоже, а вот во встроенном окошке в иде нихуя, пикрелейтед. Ctrl-D просто останавливает программу и все.
Может им в багтрекер написать? Я искал подобное у них там, вроде нет.
Но я тащемта действительно тупой и не смогу нормально описать, в чем проблема, если кто-нибудь сделает это за меня-ленивого, буду благодарен. Пока буду из файла читать, раз уж так.
>Пока буду из файла читать, раз уж так.
Поставь проверку и выходи из цикла, если введена например 'Q'.
Может я что-то не понимаю, но нейросети заменяют процессоры в рассчитывании ИИ, так?
Нет. Нейросеть (в современном воплощении) это алгоритм который просчитывается на процессоре. Нейросеть может быть реализована апаратно (как и любой другой алгоритм) - но тут профит в эффективности (процессор универсальное устройство менее эффективен чем специализированая схема), а не в кардинальных отличиях коих нет.
Ну может поймёшь укозатели.
Пора лаб закончилась.
Буду учить С++ и ОПЕНГЛ, стоит того?
Статический анализатор шланга вроде тоже умеет потенциальные утечки проявлять.
Двачую этого.
Точнее, valgrind - это куча утилит. В том числе memcheck для поиска утечек.
Ещё там же есть helgrind, для поиска race condition.
Крутая, в общем, штука, рекомендую.
С того момента, как ты начнешь учить плюсы, до того момента, когда ты сможешь сделать что-то адекватное в опенгл, пройдет очень много времени, поверь.
Там еще профайлер есть callgrind, обожаю его. Вообще я пользуюсь valgrind чаще, чем отладчиком - для мелких проблем логи помогают, для крупных отладчик уже дает слишком мало информации.
Чем больше учишь программирование - тем больше понимаешь, насколько много еще неизвестной информации и сколько жопочасов нужно, для того чтобы изучить хотя бы то, что в пределах видимости до горизонта.
Хотя, так в любой сфере объемной, наверное.
Нахуя? Чтобы делать игрули лучше взять юнити или что-то подобное. Кресты выбирают те, кто точно знает что им от них нужно.
Что-то подобное это UE, там как раз кресты нужны, кстати.
const указывает что переменная не может быть изменена после инициализации. Само значение переменной может вычисляться в любое время, в том числе в рантайме, в том числе исключительно в рантайме (тоесть ов время компиляции его вычислить невозможно). constexpr указывает что значение переменной можно вычислить во время компиляции, и оно будет вычислено если где-то побтребуется компилятору (а может и всегда, хуй знает). В рантайме разницы между ними нет, кроме того что значение constexpr будет с большой вероятностью заинлайнено, а если нет то будет храниться (скорее всего) в статической памяти, а const может быть где угодно.
const - постоянная в рантайме, constexpr - во время компиляции. То есть, constexpr выражения могут быть параметром шаблона, размером массива и т.д.
Двачую этого.
Это постфактум так кажется. Так-то даже Джоэль писал, что в курсе CS101 большинству это сложно.
Блядь, в шапке про это подробнейшим образом написано, читай шапку, сука.
>Джоэль
Этот петух использует уродливый UTF16 и гордится этим. Стоит ли его слушать, или лучше усомниться в его адекватности?
Инициализированные const тоже могут, лол. Раньше так и писали, когда не было constexpr.
В опыте-то ему не откажешь. Все эти приебнутости типа проповедования венгерской нотации не возникнут у диванного никогда.
У меня есть такая конструкция:
template<class TYPE, unsigned int COUNT> class Yoba{};
Как мне в классе Yoba сделать функцию, у которой будет ровно COUNT параметров типа TYPE? Без буста и прочих Qt.
Разноименных - никак. Точнее, можно сделать костыль на макросах, но тогда ты получишь уже не инстанс шаблона, а макрогенерируемый класс, в котором как будто вручную вбиты все эти имена членов. Еще можно сделать как в std::tuple, когда у тебя есть одна копия параметра и еще один Yoba с COUNT-1 внутри. Одноименных - элементарно через std::array <TYPE, COUNT> my_mommas; или аналогично через TYPE my_mommas [COUNT]; если любишь сишные массивы.
Хвостовая рекурсия - это старый подход который называется goto. И он не "чужд традиционному", а просто черезжопный.
Я не про хвостовую рекурсию же, а глобально. Анаморфизмы, параморфизмы, катаморфизмы, хиломорфизмы, наконец.
А как это сделать для лямбда-выражений?
Ну, то есть я передаю лямбда-функцию в конструктор, и она должна удовлетворять шаблону класса. Например, у неё должно быть 3 элемента с типом double.
Да, так я хотел сделать, но потом вспомнил, что мне нужно передавать функцию именно в конструктор. А для конструктора шаблон сделать нельзя.Или можно?
Глобально в функциональном программировании использование явной рекурсии считается зашкваром. А не использование (например, in-place quicksort через runST) не считается до тех пор, пока твоя функция чистая с внешней стороны.
Вот это да, лол. Спасибо, анон. Нельзя читать стаковерфлоу по-диагонали и делать из этого такие прочные выводы.
> А для конструктора шаблон сделать нельзя.
http://en.cppreference.com/w/cpp/memory/unique_ptr/unique_ptr (6)-й и (7)-й конструкторы вполне себе шаблонные.
Надо сделать перебор чисел до заданного значения, и в реализации использовать наследование и полиформизм.
Не могу понять, где тут надо использовать классы?
Задание говно, поэтому наследуй от вектора и перегружай какую-нибудь его функцию с нужным результатом.
Поясняю за положняк.
MSVS 2015 - OCHE HOROSHY IDE
MSVS 2013 - HOROSHY IDE
MSVS 2010 - NORMALNY IDE
MSVS 2008 - PLOHOY STARY IDE
MFC - SOVSE MERTVO GOVNO
>на старые студии выпускают обновления компилятора?
NIET
Может способ перебора должен быть разным? Типа от 0 до N, от N до 0, рандомный выбор, и т. п.? Тогда можно запихнуть наследование и полиморфизм.
Бля, ну поучись у джавистов, как они делают. Например, делаешь mixin-класс для синглтонов, через CRTP от него наследуешь шаблон объектного пула. Делаешь конкретную фабрику переборщиков, ее наследуешь от абстрактной фабрики переборщиков. В абстрактном интерфейсе фабрики делаешь метод, возвращающий умный указатель на абстрактный интерфейс переборщика. От этого интерфейса наследуешь конкретный класс переборщика и реализуешь в нем метод перебора. Создаешь инстанс шаблона объектного пула, который содержит умные указатели на абстрактные интерфейсы твоих фабрик, при старте программы создаешь и добавляешь в пул конкретную фабрику. Покрываешь все классы тестами, профилируешь, генеришь документацию к каждому методу и классу из комментариев.
>Может способ перебора должен быть разным? Типа от 0 до N, от N до 0, рандомный выбор, и т. п.? Тогда можно запихнуть наследование и полиморфизм
ХЗ.
Вообще задание звучит так: написать брут для мыла. Использовать наследование и полиформизм, stl, raii.
Я нацарапал реализацию циклами для 6, 7 и 8 знаков, а как сделать перебор классами с наследованием не имею понятия.
Можно еще кодировку в base64 запихнуть в отдельный класс, но опять же не понимаю зачем - тем более, что наследовать там нечего и некому.
Эй, есть тут страдальцы, которые до сих пор пидорят легаси на VS 2008? Поделитесь тем, как это больно, пожалуйста.
смотрите пикрл
При компилировании х86 , все норм.
При компилировании х64 , хуева туча ошибок.
SDK все стоят , гуглоебил ошибку не помогло
что посоветуете? Я НЬЮФАГ В СИШКЕ И НЕ ХОЧУ ЗАБРАСЫВАТЬ , ПРОШУ ПОМОЩИ , РОДНЫЕ.
>При компилировании х86 , все норм.
>При компилировании х64 , хуева туча ошибок
у х86 и х64 разные адреса, может быть из-за этого.
Это таки не выдумка, а реалии проекта, который я пилил год назад. Только там это было более оправданным.
Посмотри настройки компилятора, там скорее всего разные для разных систем. В х64 что-то не подключено, или не правильно подключено.
Бля, это охуенно. Схоронил.
Шлее, наверное. Хз есть ли годные переводы. Лучше уж заморочиться и читать на инглише.
Я не знаю как это сделать
>>723046
>>723046
Может я попробую дать кому нибудь сурс и попробует скомпилировать в х64 на своем пука?
https://vk.com/id344029047
Не слушай его, он херню несет.
Скорее всего, у тебя для компиляции под x86 прописаны пути, а под x64 - нет.
Полазь по настройкам, погугли, как подключать библиотеки, проверь, чтобы всё ок было.
Это не я, это он
У всех конструкторов возвращается неявно this?
Читаю сейчас про копирующий конструктор, немного не понял этой ситуации.
И в догонку, почему нельзя было сделать так же с присваиванием?
Ну чтобы можно было не делать так:
Class& operator=(const Class& c)
{
// copy
return this;
}
Или меня это ебать не должно?
Ссылка же возвращается, если вообще что-то возвращается. Нихуя не понятно что тебя смущает.
Пишу на MFC на VS98. Терпимо, к тому же Visual Assist есть
Ну в конструкторах она неявно возвращается, так?
Просто смутило то, что в присвоении это сделано явно, хотя операции похожи. (Создание объекта и присвоение)
Конструктор ничего не возвращает. Он инициализирует объект. Когда ты пишешь Yoba y = Yoba(). Вызываются и конструктор и оператор присваивания (что потом оптимизируется конпелятором).
Тихо, погоди, я запутался, смотри:
1.
Class obj1 = new Class(3);
Class obj2 = obj1;
Class(const Class& c)
:param(c.param)
{
// copy
}
2.
Class obj1 = new Class(1), obj2 = new Class(2);
obj1 = obj2;
Class& operator=(const Class& c)
{
// copy
return this;
}
Вот 2 ситуации, первая это копирование при инициализации, а вторая при присваивании одного объекта другому. Я все правильно написал? Может я изначально что-то не понимаю.
В операторе присваивания крайне желательно возвращать ссылку на объект, так как это поведение оператора присваивания для встроеных типов. Так то ты что хочешь можешь возвращать https://ideone.com/33SCsj
Да. Поэтому было бы хорошо перейти на синтакс инициализации отличный от синтаксиса присваивания. Тоесть твою вторую строчку было бы прикольно писать как Class obj2 {obj1}; А так получается что '=' может вызвать как конструктор, так и operator= что конечно немного путает.
Ну то есть возвращай this, чтобы было все как у людей.
Я это и хотел узнать, просто думал, что это имеет какое-то четкое объяснение.
Проследуйте в /s/
А нахуя переходить на 16.04 (т.е. апрель 16 года) в апреле 16 года? Полгода подожди, а пока на 14.04 посиди.
>Вот 2 ситуации, первая это копирование при инициализации, а вторая при присваивании одного объекта другому
У тебя везде присваивание. Копирующий конструктор вызывается при Class c( other_c ) или new( other_c ). Перемещающий конструктор, соответственно при Class c( move( other_c ) ).
>там много изменено?
Немного, косметика - например, constexpr улучшили. Все глобальные изменения в 11.
> У тебя везде присваивание
Нет. Foo bar = baz; это вызов конструктора.
http://ideone.com/0GM0hS
Много. Лямбды стали юзабельными, например.
Ебаные шаблоны! Сука, как горит моя жопа, пиздец!
Дело в том, что мне нужно запилить метод, который будет принимать только N переменных определённого типа. Без костылей в виде is_any как тут: http://cpp.sh/6wie
И как собрать лямбда-функцию по шаблону, если в шаблон я посылаю только тип параметра и его количество? Ну просто скоро крышей поеду, если не разберусь. Неужели для такого простого результата нужно городить тонны кода и прочих is_any? Или подключать boost? Хочу на чистом стандарте, без костылей и сторонних библиотек.
template <class T, unsigned int N> class Yoba
{
private:
std::function<T(T...??????)> function;
public:
template<class... Args> Yoba(const std::function<T(Args...)> &function) : function(function)
{
static_assert(sizeof...(K) == N, "blyad, ty ohooel?");
}
};
int main()
{
Yoba<double, 4> yoba([](int a, int b, int c, int d){ return a + b + c + d; });
return 0;
}
Так горит, что не заметил несоответствия типов в конце. Но это ничего, пусть там будет Yoba<int, 4>
Алсо, можно через initializer_list, но неужели он работает по принципу таких же костылей?
>Дело в том, что мне нужно запилить метод, который будет принимать только N переменных определённого типа.
А ты можешь объяснить, зачем это нужно?
Ну ок, представим (т.к. это невозможно), что ты шаблонами смог генерировать методы с конкретным числом аргументов.
Но для того, чтобы их вызывать, тебе всё равно надо руками писать вызов метода с определённым числом аргументов.
В чём ты хочешь получить преимущество?
Можно их теперь в несколько строчек писать, использовать for, if.
is_any нужен только для проверки типа, можешь его убрать. И это не костыль, а обычное метапрограммирование. Если связался с шаблонами, то такого рода приключений будет очень много.
> можешь его убрать. И это не костыль
А что это тогда, если без него у меня компиляция будет проходить не так, как я хочу? Почему тут нет какого-нибудь std::generate_types(int, 10)?
Так всё будет выглядеть правильнее, чем если бы у меня принимались любые аргументы.
> В чём ты хочешь получить преимущество?
Не преимущество, а возможность иметь член класса в виде лямбда-функции, которая принимала бы шаблонные аргументы.
<int, 10> кончено же, опечатка.
>Дело в том, что мне нужно запилить метод, который будет принимать только N переменных определённого типа.
Походу тебе массив нужен. А вообще от копипасты ты не треснешь.
Решение твоей проблемы есть, но там нужно ебаться с метапрограммированием по типу строения tuple. Я, в принципе, могу набросать, как оно выглядит, но не лучше ли юзать вместо кучи параметров один массив нужной длины? Для однотипных величин сам б-г велел - оверхеда даже меньше из-за отсутствия выравнивания, компилится быстрее.
Не тресну, но мой код должен быть легкочитаемым, и чтобы я мог при желании легко его воспроизвести без копипасты.
>>723748
Хочу запилить класс, который будет максимизировать значение моей лямбда-функции. У неё N аргументов типа T, этого должно быть достаточно для её описания.
>>723754
Да, я уже решил делать через массивы. Но как-то неожиданно, что я столкнулся с такой масштабной проблемой, которую изначально даже не видел. Алсо, массивы немного неудобные. Вместо доступа к аргументам функции мне придётся обращаться к элементам массива, у которых вместо исчерпывающего названия будет только номер. Можно с enum'ами и map'ами поебаться, но это всё не то.
Ты занимаешься какой-то хуйней. Намного проще заранее расписать все варианты с N, потому что их будет мало. А ты тратишь столько времени, чтобы решить это средствами метапрограммирования.
>Почему тут нет какого-нибудь std::generate_types(int, 10)
Возьми и сам напиши. Один раз помучаешься, зато потом в подобном коде будешь разбираться.
>Понимаю, что лучше такие объёмы в массивах перемещать, но хотелось бы универсальность.
Вот в этом твоя ошибка. Если ты передаешь больше 5 параметров одного типа, то где-то у тебя закралась логическая ошибка. Эта универсальность нахуй не сдалась.
В конце концов, это можно написать на макросах. И поверь, в этом случае читабельность кода и ошибок будет гораздо выше, чем у решения на шаблонах.
Да, я пересмотрел свои взгляды. Спасибо, что помогли. Делаю массивами и не выёбываюсь.
Это, кажется, старая фишка. Можно её запилить, но зачем? Они не помогут сделать лямбда-функцию с числом аргументов, зависящем от шаблона. Да и не нужно это, массивы действительно выручают.
{
list0 a;
return l_( type<result_type>(), f_, a, 0 );
}
result_type operator()() const
{
list0 a;
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1> result_type operator()( A1 && a1 )
{
rrlist1< A1 > a( a1 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1> result_type operator()( A1 && a1 ) const
{
rrlist1< A1 > a( a1 );
return l_(type<result_type>(), f_, a, 0);
}
template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 )
{
rrlist2< A1, A2 > a( a1, a2 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) const
{
rrlist2< A1, A2 > a( a1, a2 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 )
{
rrlist3< A1, A2, A3 > a( a1, a2, a3 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) const
{
rrlist3< A1, A2, A3 > a( a1, a2, a3 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
{
rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) const
{
rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
{
rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) const
{
rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
{
rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) const
{
rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
{
rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) const
{
rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
{
rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) const
{
rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
{
rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) const
{
rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
return l_( type<result_type>(), f_, a, 0 );
}
//
{
list0 a;
return l_( type<result_type>(), f_, a, 0 );
}
result_type operator()() const
{
list0 a;
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1> result_type operator()( A1 && a1 )
{
rrlist1< A1 > a( a1 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1> result_type operator()( A1 && a1 ) const
{
rrlist1< A1 > a( a1 );
return l_(type<result_type>(), f_, a, 0);
}
template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 )
{
rrlist2< A1, A2 > a( a1, a2 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) const
{
rrlist2< A1, A2 > a( a1, a2 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 )
{
rrlist3< A1, A2, A3 > a( a1, a2, a3 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) const
{
rrlist3< A1, A2, A3 > a( a1, a2, a3 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
{
rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) const
{
rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
{
rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) const
{
rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
{
rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) const
{
rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
{
rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) const
{
rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
{
rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) const
{
rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
{
rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
return l_( type<result_type>(), f_, a, 0 );
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) const
{
rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
return l_( type<result_type>(), f_, a, 0 );
}
//
Ну нет, если уж нырять в мету, все должно быть ммаксимум обобщенным и идеальным, иначе весь смысл ебли теряется. А у тебя типы не чекаются на приводимость из T.
Проблема в том, что надо не убирать параметры из списка на каждой итерации, а добавлять. Когда убираешь все просто - при нуле у тебя пустой список, а когда добавляешь, тебе надо хранить и тип и количество аргументов.
>>723970
И все же, анон сказал, что спасет, значит спасет.
http://ideone.com/qdYyn9
Ориджинал контент, так сказать.
Пиздец. Вот это сильно.
Ебать ты нюфаня.
Оказалось, что защита от рекурсии не нужна. Компилятор вычисляет next только при обращении к нему.
Давайте запилим стартап с шаблонами и метапрограммированием же. Как минимум джва ценителя в треде есть. Хотя я бы таки вместо костыльного генератора сделал через тупл и index_sequence, как белый человек.
Не, рили. Жрать нечего, работать хочу. Хуй го знает, может в твоей конторе есть вакансия и ты меня порекомендовал бы.
Тогда сорри. С embedded удаленно не поработаешь.
Тоже борды. Даже эта борда написана на крестах. А проще всего начинать с написания мелких либ, которым не смог найти аналогов. Отличное отношение полезности к усилиям, можно дохуя звезд на гитхабе словить.
где-то далеко в этот вектор мне нужно считать данные из файла (если число - пара (1, число), если ноль - пара (0,0)).
Как это сделать не особо поебав себе голову? через push_back, make_pair - ругается
В d были пруфы.
Что именно непонятно? Есть вектор векторов. Каждый элемент - пара чисел типа инт.
Имеется файл, в котором всякие числа, нужно считать их в этот вектор с условием:
если число не равно нулю, то считываем в пару 1, число
если число равно нулю, то считываем 0, 0
т.е. пара чисел это: (1 или 0, само число)
vector <vector <pair<int, int> > > g1;
g1.push_back(vector< pair<int, int> >());
g1[0].push_back(make_pair(10, 10));
cout << g1[0][0].first << g1[0][0].second;
Но вообще это сильно смахивает на быдлокод. Почти наверняка можно отрефакторить, чтобы это не выглядело так убого.
"Ой, мальчик, подойди сюда, у меня тут ошибка высветилась" - это для бухгалтеров, а не программистов. "через push_back, make_pair - ругается" - даун ебаный.
(cond? a : b) = 3;
Но не могу вспомнить почему. Подскажите.
простой компилятор или виртуальную машину довольно легко написать
А что ты хотел, чтобы тебе советовали калькулятор писать?
Чувак, если ты хочешь написать проект, _чтобы выучить язык_ - то это подразумевает большой и сложный проект, который позволит тебе осознать не только синтаксис, но и особенности языка.
Если тебе нужен не проект, а какая-то мелкая залупа, то этой мелкой залупы нужно в десятки раз больше. В таком случае пиздуй читать PPP от страуструпа. Там как раз практикуется подход куча заданий -> скилл.
На 1-ом пике все норм, на 2-ом все хуево
Прочитал что да как, сразу и не понятно все. Например, он должен быть (список) изначально отсортирован, а я и этого не умею.
Это тонкий реквест от дяди Страуструпа, чтобы я пошел читать книгу по алгоритмам и вернулся через год выполнять эту задачу? (или это не все так сложно, как кажется на первый взгляд?)
>Это тонкий реквест от дяди Страуструпа, чтобы я пошел читать книгу по алгоритмам и вернулся через год выполнять эту задачу
Кокой ты догадливый. Пиздуй учить алгоритмы и структуры данных.
Когда я пытаюсь забрать часть функций вместе с глобальными переменными которые они требуют в другой класс, компилятор начинает говорить: error LNK2005: "char * pBuf" (?pBuf@@3PADA) already defined in Class.obj
И такой текст на все переменные, несмотря на то что они в единственном экземпляре.
Что с этим можно сделать?
>Как будто из сорца или хедера не выпилил объявление
Но я их и обьявлял в хидере, так нельзя делать?
молодец. Иди читай про процесс компиляции и компоновки. А так же про формат исполняемых файлов.
Смотри сюда. Хедер это только декларация чего-нибудь от переменной до интерфейса класса, и этого недостаточно чтобы определеить глобальную переменную. Сами же переменные ассоциируются с сорцами и поэтому их определение содержится как раз в сорцах, которые и компилируется в *.obj файлы. Чаще всего подобная ошибка возникает при множественной декларации в хедерах или множественном определениии в сорцах. Поэтому либо ты пиздишь, либо Ctrl+F по всем сорцам.
Алсо, что за нахуй?
> Алсо, что за нахуй?
> забрать часть функций вместе с глобальными переменными которые они требуют в другой класс
Проебал.
>Иди читай про процесс компиляции и компоновки. А так же про формат исполняемых файлов
А вкратце можно, что где обьявлять и где инициализировать чтоб работало?
Я бы почитал, но времени 2 дня осталось, а мне надо весь проект под ооп успеть переделать.
лабы, курсовые и дипломы идут нахуй. Надо было раньше думать.
в хедер нельзя помещать определение переменной. Посколько объявление без инициализации все равно будет определением, нужно в объявлении указать extern
>Надо было раньше думать
Но... я же написал проект. Осталось только разнести функции по классам и придумать что от кого наследовать, чтоб было красиво.
>нужно в объявлении указать extern
Спс, сейчас попробую
Заёбывает, что отдельные личности не отличают декларацию от определения, аутентификацию от авторизации, etc.
Ни разу не видел статических функций. Эту сторону языка используют где-нибудь осознанно?
Оно довольно редко нужно. Плюс, сейчас это модно делать с помощью анонимных неймспейсов.
Попробовал. опять на то-то ругается.
Короче, использовать глобальные переменные в классах хреновая идея, да?
Лучше создать еще один класс, в котором будут храниться все необходимые переменные?
да
for (int i = 0; i < charV.size() - 1; ++i)
cout << charV << " " << charV[i + 1];
Алсо, с такими вопросами иди нахуй.
По умолчанию там сортирует по возрастанию. А мне надо, чтобы сортировалось по другому признаку.
Если конкретно, то d[v1]<d[v2], где d -- глобальная переменная.
При сортировке массива например свою функцию пихаешь третьим параметром. sort(&a[0], &a[n], sort_f). А как тут так же сделать?
Первая ссылка в гугле по запросу priority_queue comparator:
http://stackoverflow.com/questions/16111337/declaring-a-priority-queue-in-c-with-a-custom-comparator
В гуголе забанили?
Это осталось со старых времен. В С (нормальные люди) используют широко. Публичный интерфейс (функции которые должны быть доступны в других частях программы, и задекларированы в хедере) объявлены нестатическими, все остальные функции считаются приватным интерфейсом, должны быть доступны только в пределах юнита (трансляции) и должны быть объявлены как статические. В плюсах, если держаться ООП подхода, в таком нет необходимости - функции раскиданы по классам и если нужно объявлены как private. Вообще на работу программы объявление функции статической никак не влияет, только на линковку. Тоесть прямой необходимости объявлять функции статическими нет, это вопрос стиля программирования.
float var = 1e37; ???
При этом 10^37 занимает 63 бита. При этом это число хранится в мантиссе, т.е. весь float занимает минимум 63+8 = 71 байт.
У меня есть подозрение, что обычный float - это тот самый 80-битный extended floating point из intel 8087. Но тогда какого хуя sizeof возвращает 32бита?
Читай IEEE 754, дурачок. Давай рассуждать логически. у тебя есть отрезок от нуля до одного действительных чисел. Мощность этого множества чуть больше чем дохуя. Откуда можно сделать вывод, что действительные числа это один большой наёб. Где? В конечной точности типов с плавающей запятой.
Сам дурак, плюс твое объяснение не очень-то и понятное. Но я уже вычитал, что в float запятая, разделяющая 0 и -1 разряды, не только плавает, но может и просто отсутствовать нахуй. В таком случае речь идет о потере точности уже в положительных разрядах. Ясненько.
Двойной клик по zmeika.exe не работает?
Ох лол, кто-то до сих пор ебется с моей змейкой. Там три файла в этой пасте, плюс надо ncurses или pdcurses либу подключить.
Если у тебя студия, то распихиваешь тот кривой код по трем файлам, в студии жмешь "создать проект из существующего кода" и выбираешь эти файлы. Качаешь уже скомпиленную версию pdcurses, подключаешь и должно по идее работать.
[КОЛЯСКА@ПРЫЩЕЙ]$ g++ main.cpp game.cpp `pkg-config --cflags ncurses` -o zmeyka `pkg-config --libs ncurses` -std=c++11
game.cpp: В функции-члене «void Game::placefood()»:
game.cpp:38:21: ошибка: нет декларации «srand» в этой области видимости
srand(time(NULL));
^
game.cpp:42:23: ошибка: нет декларации «rand» в этой области видимости
food_x = rand() % (maxX - 1) + 1;
Да при чём тут лабы уже в конце концов, просто помогите запустить эту хуйню.
Напиши, узнаешь.
Я не поэт, кресты я знаю слабо,
Чтоб рифмовать баззворды через раз.
Удел мой - ждать, покуда сын Баала,
Наш легитимный ОП, войдя в эстаз,
Извергнет лиру запоздало...
>726020
>Я не поэт, кресты я знаю слабо,
>Чтоб рифмовать баззворды через раз.
>Удел мой - ждать, покуда сын Баала,
>Наш легитимный ОП, войдя в эстаз,
>Извергнет лиру запоздало...
У "легитимного" ОПа не лучше. Все равно мочу дергать будем для правки шапки. Заодно и стихи для стихомразей вставит, когда оп-хуй созреет
SFML попробуй.
В гугл, даун.
Это копия, сохраненная 5 мая 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.