Здесь кладбище для веривших когда-то, Что код не должен быть переносим. От байтоебства к жизни нет возврата -
Задачам ты найдешь ответ своим Без утоленья помысла иного, Который в сердце у тебя таим.
Затем решишь проблемы те же снова, И трижды, и еще раз впопыхах, Подстегнутый заказчиком суровым.
И вскоре со слезами на глазах, Средь ста платформ терзанием объятый, Тщась побороть пред оверхедом страх,
Будешь хулить свой инструмент проклятый.
FAQ:
Q: Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20%, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, что не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задач. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
<устарело> Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl <устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Тонкости языка (для гурманов): Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5) Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Софт и библиотеки:
IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/
Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org Библиотека для удобной высокоуровневой работы с сетью (ахтунг! утягивает за собой boost, openssl и даже Аллаха) - https://casablanca.codeplex.com Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Я нафаня. Сибляди утонули кудато, поэтому я здесь. Есть вопросы по структурам:
Если я создал указатель на структуру, например struct MyStruct* p_ms. Сработает ли free( p_ms ), память освободится? Должны ли быть поля такой структуры, тоже ссылками или нет?
>>566081 Ты такой командой не создашь структуру. Это просто указатель, в котором мусор. Ты даже еще не определил саму структуру, только объявил, указав struct MyStruct, что твой указатель смотрит на нечто с пользовательским типом MyStruct. Пока ты не положить туда выделенный malloc/calloc/realloc указатель на на самом деле созданный экземпляр такой структуры, free вызывать нельзя, пиздец будет. Алсо, мне кажется, что ты путаешь объекты и классы. Сущность "struct MyStruct" это как бы метаобъект, тип. В программе ему ничего не соответствует, если ты не создаешь его экземпляров. А указатель должен смотреть на его экземпляр. Представь, что у тебя есть тип int, а есть числа типа int, это же разные вещи. Со структурами то же самое, и для работы с их типами ты не можешь применять free и всякое такое, как в пистоне или языках с интроспекцией. Если уж ты создал тип структуры, то никак его не удалить, увиденное не развидеть, в общем.
>>566081 Если выделил через malloc то освободится. Без разницы поля указатели или нет, только если указатели нужно освободить то что по ним находится. Не используй "ссылка" как синоним слова "указатель".
>>566081 >Я нафаня. Сибляди утонули кудато, поэтому я здесь. Шапка треда, самый конец: >>Старший брат: >>518562 (OP) (OP) Там ещё аж целых 10 постов до бамплимита.
Хочу выучить с++, немного знаком с джаба-скриптом, но совсем немного. Но веб мне не очень интересен, JS вообще случайно начал осваивать дошел до основ ООП, могу запилить регистрацию на сайте и всякие несложные дргие штуки, а вот в погромисты хочется записаться. Таки вопрос: обязательно мне к прочтению Кнут и архитектура пеки? Когда-то еще учил паскаль, но нихрена не помню. Думаю делфи еще обмазаться, под прочтение "Искусства программирования", а уже после этого читать учебники непосредственно по срр. чтобы структурированно было. Или лучше все в одну кучу? то есть учебник по с++, Кнут, архитектура, а делфи не нужен
>>566149 Делфи не нужен, если кмеешь в жс. Смотришь на архитектуру пеки, оси и чистый си. Когда немного разберешься, начинай кресты. Кнута и всякие алгоритмы можно учить независимо, ибо любые алгоритмы оттуда сложнее, чем любые, которые тебе понадобятся для изучения языка.
>>566231 >Смотришь на архитектуру пеки, оси Юслесс хуйня. Кнут тоже довольно бесполезен. Кучу времени прососешь, а пользы особо не будет. Кормена почитай местами, да и всё.
>>566253 >Больше ничего ен могу придумать Это потому что ты ничего сложнее laba3.cpp не писал. cache-friendly алгоритмы, параллелизм, сокеты и сетевое взаимодействие, ассемблерные вставки, cpu vs gpu, ну ты понел.
>>566260 >параллелизм Там требуются знания, уровня НУ, КАРОЧ, МОЖНО МОЖНО ИСПОЛЬЗОВАТЬ НЕСКОЛЬКО ПРОЦЕССОВ, ВОТ))0) >сокеты и сетевое взаимодействие Опять же, знания на уровне НУ, ЕСТЬ ПОРТЫ ТАМ БЛЯТЬ, НУ И ПО НИМ КАРОЧ ПОДКЛЮЧАЕШЬСЯ)) >ассемблерные вставки Ну, вот насколько они юзабельны, я не знаю, да. >cpu vs gpu Это уже не совсем с++. Вернее, там уже нехилые расширения и вообще другой компилятор.
>>566277 Вот именно, что на диванном уровне достаточно того, что ты написал. А потом тебя просят решить задачу, которую еще никто не решал, и начинается ебля с глубоким погружением.
>>566277 >> параллелизм >Там требуются знания, уровня НУ, КАРОЧ, МОЖНО МОЖНО ИСПОЛЬЗОВАТЬ НЕСКОЛЬКО ПРОЦЕССОВ, ВОТ))0) И потом после таких пидоров надо ковыряться в дампах и выяснять, почему оно виснет или падает, когда несколько потоков пытаются в один ресурс.
>>566369 Я в раздел интернет зашел и хотел позыреть сетевое взаимодействие, допустим. Но там его нет, а только языки разметки и как сайтом управлять. Что я не так делаю?
>>566279 Ну это совсем толсто. Все знают про такое. >>566374 >>566370 Не слушай этого пидараса. Не нужно тебе знать, как работает компьютер блять. Если ты не собираешься никакой низкоуровневой хуйней заниматься, то просто начни изучать какой-нибудь язык и почитай начало Кормена про сложность алгоритмов, затем там же почитай про структуры данных, про графы, комбинаторику. Дальеш сам поймешь что делать дальше и чем хочешь заниматься. Никакие книжки про УСТРОЙСТВО КОМПЬЮТЕРА тебе нахуй не нужны.
>>566387 Я не тот, о ком ты возможно думаешь, просто мимопроходил, но тоже ньюфаг. И четко решил, что мне интересно было бы узнать как устроено сетевое взаимодействие (не физическая часть офкорс), заодно и ещё чего-нибудь, ассемблерные вставки было бы круто, но надо знать когда их применять и ваще дочитать Калашникова. Архитектуру пеки более менее знаю, в любом случае Таненбаум под боком есть.
>>566368 >>566374 Это >>566369 не я был. Тебе нужно всего-то осилить две книги Таненбаума - оси и архитектура компьютера так и называются. Это общепризнанная годнота, но они довольно длинные, так что можешь читать неинтересные места по диагонали. Или глянь 4-5 тред на архиваче, там я вбрасывал ссылку на ВМКшный курс, там то же самое, но сжато.
>>566387 >все знают про такое Эффект Даннинга-Крюгера, братюнь. >Никакие книжки про УСТРОЙСТВО КОМПЬЮТЕРА тебе нахуй не нужны, если твоя мечта - стать веб/тырпрайз макакой и клепать формочки всю жизнь Пофиксил тебя.
>>566391 Может быть и есть, нашел citforum, там вроде по сетям есть что-то, но я не имею никакого представления в каком порядке читать эти статьи/книги, чтобы понять.
>>566396 Ну а хуле, в рамках стека протоколов там все разжевано вплоть до уровня представления данных. А все, что выше, это уже платформозависимая хуйня, и там либо очень краткий универсальный материал сокеты, MPI всякое, который легко нагуглить и осилить, либо совсем высокоуровневая хуйня, которая у каждой библиотеки своя, и нужно читать доки к ним.
>>566399 Тут остается только обмазаться Таненбаумом. Как я понимаю ещё и ОС прочесть придется, знаний архитектуры на уровне "есть регистры, основная память, шины, через которые повязаны периферийные устройства" нихуя не хватит, правильно я понимаю?
Вопрос: где есть хорошие тесты и задачки на знание С++ и алгоритмов? Чтобы только бесплатно и примерно соответствовало тому, что бывает на собеседованиях.
>>566492 От архитектуры зависит же. Но обычно в обработчике наиболее крупной из вложенных задач, в которых не смогло выделиться. Или в наиболее вложенной из тех, которые гарантируют безотказность. Или во внешней функции потока, если не хочется ебаться, и можно позволить в таком фантастическом случае всему упасть.
Репостну сюда, эта паста просто не имеет права пропасть.
>ты, наверное, читал рассказ про Рипа Ван-Винкеля. Напомню, на всякий случай, он заблудился в лесу, потом играл в кегли с Генри Гудзоном, ну или приснилось что играл. Проснулся он в лесу - смотрит - "хуе-мое!" - а у него борода отросла. Оказалось, что проспал 100 лет и как-то отстал от жизни. Ну а как нагонять? Никакой актуальный ко времени своего пробуждения язык (вроде того же эмелеговна) он не осилил и пришлось ему собственноручно повторить всю историю языкостроения. Начал он с говняшной, потому что до того как в лесу заплутал он, видимо, писал на сишке прошивки для фонографов и телеграфов. Прошло лет десять, он здорово продвинулся и переизобрел ЦЕПЕПЕ, но шутку про инкремент ему переизобрести не удалось, потому он назвал язык D. Тут мы вводим в повествование нового героя - румынского фокусника и рукоблуда. Всю жизнь он оттачивал мастерство лепки троллейбусов из хлеба, удаления гланд через жопу и построения изб из одних гвоздей - без единого бревна. Больше всего потенциала он видел в ЦЕПЕПЕ, но тот сыграл с ним злую шутку. Иллюзионист проштудировал стандарт и быстро напридумывал всяких диковин, но далее выяснилось, что компиляторов ЦЕПЕПЕ поддерживающих стандарт, тоесть компилирующих именно ЦЕПЕПЕ не существует! Впрочем, один компилятор ЦЕПЕПЕ ему таки найти удалось, но никто кроме него и автора компилятора о нем не знал. Впрочем, это позволило фокуснику написать статьи, тексты, посты, книги и широко прославиться в узких кругах. Но писателства ему для полного счатья не хватало. Так бы фокусник и закончил свои дни в печали, но однажды, проходя по своей дремучей трансильвании с осиновым колом в руках, набрел на землянку отшельника. Заросший курлибрейсами старикан с дикими глазами, не замечая ничего вокруг, вытачивал нечто, как две капли воды, похожее на ЦЕПЕПЕ. Великий румынский писатель с опаской огладелся по стронам. Ни представителей мегакорпораций, ни хищных мозолеедов, ни сплоченных рядов комитетских пидарасов, которые могли бы помешать писателю инженерить что-то кроме человеческих душ, не было видно. "Удача!" - Подумал наш новый герой - "теперь я могу не просто придумывать анальные трюки для существующего языка, но приложить свою ловкую руку к созданию языка, который идеально для анальных трюков приспособлен!". Фокусник осторожно окликнул отшельника - тот посмотрел на первого, за много лет, увиденного человека со страхом и недоверием. Румынский фокусник показал фокус "отрывание пальца". "Пиздато!" - оценил отшельник. Автор текстров и постов хищно улыбнулся: "Хочешь, и тебя научу?". "А то!" - ответил отшельник. И все заверте
Мне товарищ скинул ТЗ, где надо было написать небольшую игру на крестах. Там типа лабиринт, монстры, инвентарь и прочая ересь. Он говорит, что не знает, как правильно генерировать карту. Я спросил, какое условие, и тоже задумался. Суть такая: пользователь вводит количество комнат, после чего ему спавнит карту и он где-то появляется на этой карте. Цель — найти сундук и ключ к нему. Входа и выхода нет.
Как я говорил, единственное, что меня беспокоит, это генерация. Выглядит примерно как на пике: черные клетки — комнаты, белые — стены.
Какие есть идеи? Необязателен код, сама суть важна.
>>566794 Можно попробовать генерить сначало точки наугад в 2d, а затем проходить по горизонтальным и вертикальным и соединять, например, первые попавшиеся точки между собой. Хотя, не уверен, что будет всегда сходиться.
Была у меня идея сгенерировать какую-то карту, ходить "по кругу" от первой точки, смотря, есть ли на этом "круге" хоть одна комната. Если есть, то оставлять этот размер. Если нет, то "обрезать". Но это звучит как откровенное говнокодерство и, как мне кажется, очень неэффективно, особенно на больших картах.
>>566829 1. В двойном массиве в 0.0 - первая комната. 2. Ставишь вторую комнату в одном из четырёх возможных направлений, выбирается рандомно. 3. Повторяешь п.2, пока количество комнат не станет равно нужному. 4.Если в п.2 выбрались координаты, где уже есть комната, то переходишь в эту точку и высчитываешь п.2 уже там, но не вычитываешь из счётчика комнат. 5.Когда сгенерировал, ограничиваешь карту по максимальным кооринатам массива.
>>566794 Выставляешь две точки (начало и конец), можно еще несколько ебнуть если нужны (к примеру ты хочешь чтобы сундук и ключ находились далеко от входа и выхода, и далеко друг от друга - их можно выставить сразу). Потом в случайном порядке проходишь по всем стенам. Если у стены нет соседней комнаты, или комната одна то заменяешь стену на комнату. Если соседних комнаты две, проверяешь соеденены ли эти две комнаты между собой другим путем, если не соеденены то заменяешь стену на комнату (тоесть соеденяешь их) Если уже соеденены то оставляешь стену. Если три соседа то оставляешь стену. Таким образом проходишь по все стенам (в случайном порядке, по одному разу). Если требование по количеству комнат важно, то дальше нужно уменьшить лабиринт. Находишь путь от входа к выходу и к сундуку с ключем (если они есть) - его не трогаешь. Потом находишь случайный тупик (комнату у которой только один сосед-комната) и превращаешь его в стену. Повторяешь пока не станет нужное количество комнат. Тупики можно или сокращать в глубину, пока не дойдешь до развилки (тогда получится несколько тупиковых длинных коридоров) или понемного откусывать от каждого тупикового в случайном порядке - тогда их будет много, но коротких.
>>566884 У меня есть серьезное подозрение, что во всяческих олдскульных шутерах, где была генерация уровней, это все равно делалось не такими клеточными проходами, как тут выше сказали, ибо полученные таким образом уровни гораздо более уебищные, чем сложные. Ну то есть потенциал размер карты используется очень слабо, в карту 10х10 можно уже уложить неплохой лабиринт, а клеточный проходчик сделает практически прямую несложную хуйню, просто исходя из вероятности. Мне кажется, стоит смотреть в сторону отдельного зашития небольших кусков лабиринта, которые будут готовые нескольких видов, а генератор будет иметь право только вертеть их и соединять между собой.
>>566993 Русский перевод висит в шапке. Читаю сейчас, в общем относительно неплохо написано, но когда доходит до модели памяти начинается ад. Еще советую на эту тему читнуть главу из ОС Танненбаума про процессы и потоки. И возможно еще про взаимоблокировку.
>>566794 Я делал такое в ue4 на блюпринтах, лол. Задаю размерность поля (получается многомерный массив) и количество комнат. Начинаю бродить по нему в цикле до тех пор пока не сделаю все комнаты. Генерю случайное число от 0 до 3. Числа определяют направление движения (вниз, вверх, налево, направо). Если на этом месте уже есть комната, то выбираю новое направление. Потом в несколько проходов расставляю двери, вычисляю стартовую позицию и набрасываю всякие ништяки. Получается пикрелейтед.
>>567006 >>567006 Лучше в оригинале прочитаю. Время есть, заодно терминов новых нахватаюсь, подтяну технический ингриш. Пока читаю мэйерса "Эффективный сидваплюс".
>>567108 Должен быть вариант проще. И не только для циклов. Видел когда-то в этом треде и через двоеточие как-то писали. Может каким-нибудь дэфайном этот фор сделать?
>>567104 Кстати я уже 21 день С++ изучаю и лафоре прошёл. Ещё пару видеокурсов по ОС, алгоритмам и архитектуре компьютера с ассемблером. Может пора свой мини проект намутить? В консольке простенький и чтобы до меня уже миллион раз был сделан. Есть идеи какой?
>>567121 Наверно. Я даже не знаю что такое auto. Мне какую-то конкретную книгу надо читать чтобы понять это новые упрощения или достаточно серии статей? Реквестирую.
Господа, читаю Майерса, такая фраза: >Если вы заглянете «под капот» C++, то увидите, что ссылки обычно реализуются как указатели, поэтому передача чего-либо по ссылке обычно означает передачу указателя. В результате объекты встроенного типа (например, int) всегда более эффективно передавать по значению, чем по ссылке. Поэтому для встроенных типов, если у вас есть выбор – передавать по значению или по ссылке на константу, имеет смысл выбрать передачу по значению. Тот же совет касается итераторов и функциональных объектов STL, потому что они специально спроектированы для передачи по значению. Программисты, реализующие итераторы и функциональные объекты, отвечают за то, чтобы обеспечить эффективность передачи их по значению и исключить «срезку». >Тот же совет касается итераторов и функциональных объектов STL, потому что они специально спроектированы для передачи по значению.
Но чем чревато передача вектора по ссылке? Это же нелогично: если у меня мегабайтный вектор, зачем мне плодить еще один, вызывая конструктор копирования.
>>567169 Функтор это такой объект, у которого один из методов "избранный", и объект этот можно "вызвать" как функцию, при этом вызвав этот метод. Или, что то же самое, это функция, хранящее локальное состояние.
>>567418 Дебил, я не знаю что ты там придумал уже, я отсылаюсь к первому твоему обосрамсу. >>567146 >Тот же совет касается итераторов и функциональных объектов STL, потому что они специально спроектированы для передачи по значению. >Но чем чревато передача вектора по ссылке? >Это же нелогично: если у меня мегабайтный вектор, зачем мне плодить еще один, вызывая конструктор копирования.
Во-первых, не маняврируй. Во-вторых, нашел чем оправдываться. Не знать что такое функторы? Ты учил по видеороликам на ютьюбе, что ли? Еще один повод разъебать тебя, гений.
На, почитай: >>567150 До твоего вброса написал. Можешь и дальше хвататься за этот итератор, о котором я вообще ничего не сказал. Я не буду тебе мешать теперь уж точно. Доказывай себе, что ты не обосрался.
>>567439 Есть только рациональное зерно в какой-то степени, но не более. Формально - это неверно, и о таком неприлично говорить в высоком обществе, особенно на двачхека, где и обоссать могут.
>>567483 У статических анализаторов включай игнор. Как кстати в этом грёбанном xcode заигнорить предупреждения об unused variable? В настройках проекта отключил уже, всё равно подсвечиваются. Как вообще что-то в нём заигнорить?
>>567577 Хуй знает, я стараюсь исправлять код, а не игнорить такое. Вдруг компилятор обосрется и таки выделит память, нехуй преждевременно пессимизировать.
C++ developer(!!!) [Requirements] - Strong Computer Science fundamentals: Operating system concepts, Data structures and algorithms, Complexity analysis, Multithreading/concurrency, etc - Expertise in building and maintaining large scale software systems with long life spans Experience in building Internet scale distributed systems or high volume client/server systems - Ability to work on different platforms or environments - 5+ years of professional experience with C++ (C++: C++11, Boost) - Knowledge of SQL, MongoDB, JSON/BSON, JavaScript, XML/XSLT, Web Services (REST/SOAP), Maven Desire to work with Java
Education: B.S. Computer Science or Computer Engineering at minimum. M.S. or PhD preferred Prior experience in program management or project leadership is desirable Professional experience with Java (JDK/Core, Spring Framework (MVC in particular), Spring Security, JUnit, Tomcat, Apache Commons)
обыденное говно плюс пара баззордов небось основная логика на джаве а выскнагруженое говно на крестах я бы может даже прошел, да только джаву в рот ебал и на хую вертел
Что приделывать к Vim'у чтобы писать на С++? Нашел какие-то библиотеки gcc-multilib, скачал пакеты clang и bash, но что еще туда прилепить чтобы оно запустилось?
Эй, сеньоры. Слушайте, захотелось немного поработать с сетью : Ну как с сетью, ничего серьезного Хотел собрать\ попытаться собрать данные по пользователям вк - статистика разная и т.д :
т.е нужно сделать выборку людей из вк, а потом пройтись по этим людям, в поисках нужной инфы.
Но в сетевом программировании я совсем профан :
вопрос мой такой : на плюсах делать такое - это не микроскопом гвоздь забивать? может быть попробовать на ПИТОНе сделать?
Или забить , потому что разницы особо не будет? (в этом случае посоветуйте матчасть, чтоли)
>>567777 в том то и дело что я по теме URLHTTP профан, к сожалению. Ну и я хотел именно практику на плюсах получить : а то читаю читаю читаю, а как до дела доходит - всё мимо.
поэтому, по мат части что посоветуешь, Если на плюсах решу делать. *с питоном всё относительно ясно - ну т.е направление понятно.
Или просто выбрать какую нить библиотеку типа CURL и документацию читать?
>>567844 В чём плохая практика-то? Что не нужно превозмогать себя и делать всё самому? почему-то распространённое мнение из-за скудной стандартной библиотеки
>>567980 норам, если она выглядит не совсем уёбищьно. покажешь, что умеешь разбираься в чужом кодедокументации. а девочкам hr-рам вообще как-то. да и менеджерам как-то. да и разрабам как-то, если проект не связан с их полем деятельности.
session = vk.API("vk_app_id", "login", "pass") posts = session.user.friends("user_id") for friend in friends: print(friend) [/code] user.friends от балды взял, так подсовываешь туда метод из офф. док по вк апи. профиты: не надо ебаться с сеткой и памятью анти-профиты: документация сосает
>>568046 нет, ты не совсем так меня понял. для среднестатистической конторы нужно какое-то количество своих проектов и ключевых слов в cv. в тоже время, им практически насрать, что это за пункты и ключевые слова. глагное - ты можешь в документацию и в кодинг
Эй, поцаны, позырел блог мужичеллы, который книги залпом читает, так вот, он там одну такую по крестам хвалит. Professional C++, 3rd Edition (Marc Gregoire) Поясните вообще за неё, нормально так? Или как земля? Может есть более лучшие? слова блоггира по поводу книги. Учебник по C++ с учетом нововведений C++11/14. В том числе рассматривается многопоточность, работа с регулярными выражениями, и прочие возможности стандарной библиотеки. Кроме того, автор учит отладке с помощью gdb, поиску утечек памяти, профайлингу gprof’ом (а также отладке и профайлингу с помощью Visual Studio), и многим другим практическим вещам. Есть и довольно непростые для восприятия моменты, например, написание своего контейнера по аналогии с тем, как это сделано в STL, или метапрограммирование на шаблонах. Много говорится вообще о хороших практиках в программировании, есть главы про code style, дизайн программ в целом, модели разработки (водопадная, спиральная, вот это все), и другие подобного рода вещи. Есть даже appendix о том, как подготовиться по этой книге к собеседованию! Я считаю, книга просто великолепная. Шикарный учебник и справочник по современному C++. Обязателен к прочтению любому программисту на этом языке, а также к перечитыванию случайных глав перед сном.
>>568082 А вот и элитка подъехала. Не читаю обычно на английском что-то, если есть нормальный перевод. Так-как даже при неплохом уровне английского, всё-равно читается гораздо медленнее и приходится больше вдумываться.
>>568018 Мне не рендеринг нужен. Я пытаюсь накодить довольно специфический байессовский вывод на MRF с помощью MCMC, а в статистике нубоват, вот и ищу приличные реализации.
>>568062 Раз уж такая пьянка пошла. С чего читаете? С экрана, или читалки? Стоит ли брать читалку, если рассчитываешь использовать только для книг по сабжу?
Программач, есть вопрос. Пишу пока в цпп тред, хотя вопрос, видимо, не совсем в тему. Сразу скажу, что вопрос не по лабе и не по алгоритму, а скорее по внутренней работе компилятора. В общем, я написал простенький код для метода Гаусса. Написал функцию, чтобы посчитать невязку. И всё нормально работает, но есть один момент… Сам код: http://ideone.com/I8xuLl На вход принимается матрица — выводится сферическая невязка. Функция невязки в самом верху (специально вынес на видное место). В самой функции, две переменные (diff и diff2), которые считают одну и ту же невязку, но diff — это квадрат разности, а diff2 — тот же самый квадрат, но с раскрытыми скобками, то есть я банально раскрыл квадрат. И какого же было моё удивление обнаружить, что diff принимает адекватное значение, а diff2 всегда равен нулю. Собственно, это всё видно в выводе. Аноны, почему так? Почему при раскрытии скобок у меня получился ровно ноль? Так же не должно быть? Какая разница, каким образом я перемножаю элементы? Что там могло произойти?
>>568307 Я запустил под отладчиком и посмотрел, что на первом шаге в цикле происходит, там vectun [0] в точности 25, а check [0] 24.999999999999996, т.е. невязка на грани точности double. В случае diff, когда скобки не раскрыты, маленькая погрешность на каждом шаге сразу честно вынимается разностью, и возведение в квадрат ее только увеличивает. А в случае diff2 ты возводишь в квадрат не саму погрешность, а относительно большие элементы вектора. При этом сама погрешность уже не влезает в мантиссу и слагаемые становятся полностью одинаковыми. Это нормально для плавающей арифметики. Думать о порядке выполнения операций не требуется только если твоя погрешность достаточно высока, а иначе нужно сначала располагать операции с маленькими величинами, и постепенно поднимать градус, без этого округление и пиздец.
>>568331 Ну хорошо, я понял. Но возник ещё один вопрос. Если я заменю в typedef double на float, то у меня оба значения станут нулями, что логично. Однако если поставлю туда long double, всё равно получу оба нуля, то есть long double посчитал хуже doubl'а. Как это можно объяснить? Ведь long double умеет большую точность (или как минимум такую же) в сравнении с double.
>>568363 А как объяснить то, что 6/3=2, а 10/3=3,33333333333333333333333333333333333 и никаких цифр не хватит, чтобы описать это с нужной точностью? Не заморачивайся (каждый из таких частных случаев можно разбирать бесконечно), просто если точность твоих заморочек на пределе double, переписывывай код так, чтобы очень большие цифры с очень маленькими не складывать. Например, полином ax^3+bx^2+cx+d нужно считать как d + x (c + x (b + x * a)).
>>568367 >Не заморачивайся (каждый из таких частных случаев можно разбирать бесконечно) Я уже всё это понял, но момент с long double напряг. Он должен работать по идее точнее, чем double, но на практике выходит наоборот. Это очень странно. Во всяком случае нелогично.
За советы спасибо. Раньше даже не задумывался о таком. Теперь буду учитывать.
>>568368 Да даже если я опечатался, суть ты понял: нужно избегать больших степеней, потому что числа меньше 1 превратятся в тыкву, а числа больше 100 - в твою маму.
>>568372 float на x86 процессоров на самом деле считается так: float число превращается в double, потом вычисление идет в double, а дальше результат сохраняется во float. Поэтому float - это что-то вроде double с округлением. Когда программируешь на CUDA (а видюхи частно считают во float, а double раза в 4-8 медленнее) это часто приводит к проблемам, когда в рабочем на пека коде откуда-то вылезают дикие шумы. В итоге в твоем случае (double)10^-29 округлилось до (float)0 (а до куда еще), вот и все. Ну, скорее всего. Плюс, второй момент, float, double и long double - это конечные двоичные дроби. Может быть такое, что иногда вычисление в конечной дроби меньшего размера точнее, чем в дроби большего? А хуй знает, но я бы не удивился, если бы иногда (но не в среднем) было бы так.
Расскажите пожалуйста про компиляторы. Всегда писал в вижуалке и соответственно компилятор MSVS. Хочу поюзать какой-нибудь другой, чтобы потом перекатиться на линукс.
>>568393 Компилятор - это консольная программа, которая принимает на вход cpp файлы и возвращает объектные файлы. А потом линкер из них делает собственно исполняемый файл. Тебя, скорее всего, интересует не компилятор, а IDE. К той же Visual Studio можно подключить любой компилятор, хочешь микрософтовский, хочешь интеловский, хочешь гну, хочешь - и вовсе кланг.
>>568394 Неа, вот как раз к VS проблематично подключить что-либо, кроме майкрософтовского компилятора. Если так сделать, то отвалится большая часть возможностей отладчика, которые и делают VS самой удобной IDE из всех. А остальные IDE да, можно использовать с любым компилятором, но тогда возможности по отладке весьма скудные, как и в случае VS с немайкрософтовским компилятором.
>>568452 Ну если ты Чак Норисс и не делаешь ошибок по определению, то да, а для нормального человека годный отладчик это один из важнейших параметров при выборе IDE. Да и Чаку Нориссу отладчик VS не помешает, если учесть, что он еще профилировщик, монитор ресурсов и даже Аллах.
>>566041 (OP) Объясните дауну вот это. " кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл,"
>>568567 A создастся в куче, потому что new. Но скорее всего ты хотел написать B ptr = new B() и спросить про внутренний А. В этом случае B будет в куче, и А будет в нём, но obj будет не указателем на какой-то отдельный кусок кучи с полями А, а будет участком памяти внутри области экземпляра B.
>>568567 ты тупой дибил, нихуя не разбираешься и указываешь мне на несуществующие ошибки, а свои ошибки не признаешь? ПОШЕЛ НАХУЙ С БОРДЫ, ТУПОЙ МУДИЛА!
Такой вопрос. Можно ли как-то сделать приведение типов, хранив этот самый тип заранее в переменной? То-есть, хочу я, например, взять массив стринг значений и массив стринг значений с названиями типов. И потом каждый элемент из первого массива привести к типу из второго массива. Типа: a[0] = "123" a[1] = "True" a[2] = "123.12"
>>568729 Инфу по типу можно получить и сохранить через std::type_info или std::type_index. Но ты не можешь просто скастить переменную к типу заданому другой переменной, из-за статической типизации. Любой каст должен производится к типу известному во время компиляции.
>>568758 > ты не можешь просто скастить переменную к типу заданому другой переменной Имелось ввиду используя стандартный каст. Можно написать кучу функций под каждый тип, и там в огромном свитче выбирать нужный тип и кастить к нему с помощью функции. Соответственно под каждый тип нужно свою переменную для хранения результата, как вариант юнион.
>>568764 >ad-hoc полиморфизм При чем здеся полиморфизм? У него две переменных конкретных типов - одна строка (то что превращать нужно), а в другой инфа про тип.
>>568748 += i это проход по массиву Остальные пункты это какое-то примитивное гаммирование. Он хотел, наверное, таким образом моделировать псевдослучайную гамму без генератора.
>>568786 >При том К чему эта параша? У тебя в одной переменной можно хранить как инты так флоат? Попробуй немного напрячь мозг, тут не хаскель, думать нужно.
>>568390 А такие моменты никак не регулируются стандартом? Ведь это такая неоднозначность. Скажем, решил программист написать программу, используя как можно большую точность, выбрал специально для этого long double, и тут вдруг выясняется, что double в некоторых задачах (возможно, не во всех) ведёт себя более адекватно. Как так вообще можно?
>>568825 Там [ i ] пропущено. В конце строки должен быть нульбайт - тогда программа и остановится. Либо name++ вместо i++ сделать и поправить в остальных местах.
>>568879 Окей, спасябки. Может еще подскажешь, в чем основная разница между universal refs и rvalue refs? И что самое главное(рили не смог нагуглить) какова семантика слов lvalue и rvalue? Левое/правое значение? Или r в данном контексте = reference? Спасибо заранее.
Можете объяснить, как вообще устроен односвязный список? Вернее, меня интересует, есть ли у элементов какие-то id? Вот есть, допустим, задачка про "Узнать, зациклен ли список (конец указывает на голову, а не на null)". И обычно решается это запуском двух итераторов с разными шагами. И если они УКАЗЫВАЮТ НА ОДИН ЭЛЕМЕНТ когда-нибудь, то список - зациклен. А как узнать, что они указывают на один элемент? По значению? Значения могут повторяться. По ячейке памяти? Зачем тогда нужен какой-то второй итератор? Можно просто сравнивать с ячейкой памяти головы и всё. НЕПОНИМАТ
>>568883 universal refs введено исключительно Скоттом Мейерсом для обозначения наиболее общего случая использования значка &&. Там дело в том, что && еще не значит rvalue ref, в некоторых случаях вывод типа параметра функции из аргумента шаблона, или, например, auto играет роль не только значок &&, но и то, чем эта ссылка инициализируется. В зависимости от инициализатора && может значить lvalue ref или rvalue ref. Поэтому Скотт назвал их "универсальными". Подробнее можно почитать здесь http://www.pvsm.ru/c-3/19568 и здесь http://habrahabr.ru/post/242639/.
>>568949 Если вкратце, то способ с двумя итераторами более общий, потому что он найдет любой цикл, а не только проходящий через голову. Например, для списка по форме как цифра 9, а не только собственно кольца. В случае, когда такого быть не может, разумеется, алгоритмически гораздо выгоднее сравнивать с адресом головы, как ты сказал.
>>569640 Нормальные чуваки используют умные указатели и не трахают мозга. Нет, это не норма, для того их и разыименовывают, чтобы если такая хуитка случится (на практике может что-то подобное быть разве что в многопотичине/асинхронной хунте).
>>569664 И типа для того чтобы переместить lvalue(для которых, ясен красень, определен только лишь copy ctor), мы делаем каст к rvalue с помощью std::move, и уже эта вся хуйня идет обрабатываться move ctor'ом. Я все правильно понял либо я вообще хуйню спорол?
Плюсаны подмогните. Поставил Qt Based on Qt 5.5.1 (MSVC 2013, 32 bit) 1. Есть ли способ поставить компилятор от 2013 студии, не ставля саму студию? 2. Тот же вопрос с дебагером.
>>569775 >1. Есть ли способ поставить компилятор от 2013 студии, не ставля саму студию? >Блядь, ты дебил? Поставь gcc или clang если нужен именно компилятор. Действительно, дебил именно он.
>>569776 >Действительно, дебил именно он. >>569777 >Мне нужен компилятор MVS2013, так как под него DLL'ки. Нет блядь, дебил именно я. Послал ебучего неосилятора читать Рихтера
>>569688 Уже проверил. Теперь это действительно кажется элементарным, хотя дня три сидел и разобраться не мог. Хотя, я наверное понимаю причину. Читал об этом на хаброподобных русскоязычных ресурсах, вокруг да около. http://thbecker.net/articles/rvalue_references/section_10.html Вот здесь охуительно поясняется, вдруг кому интересно будет.
>>569886 Нет, конечно. Разницы по скорости между emplace_back и push_back нет. Выгода от использования того или иного метода появляется, если меняется целевое место инициализации объекта и, если есть необходимость произвести над временным или этим объектом какие-либо операции. Применительность к задаче же1
>>570463 Тот же вопрос. Как-то писал приложение с OpenGL и GLUT, хотел сделать GUI в QT, проебал дня 3, но так и не сумел настроить. Теперь дико ненавижу всё это дело.
>>570516 >пейсал игрушку йа же киррилл программизд илита /gd >ниасилил настройку готовых бинарников, фу бля нинавижу сука Цитирую шапку: >Все идут на хуй. >Хейтер сосет члены на пару со своей мамашей.
Анон, что это за говно? Как это понять? Если мы 32-битный регистр поделили пополам, а потом еще раз пополам, то эти четыре части имеют по 8 бит. Как в этих 8-битных частях может содержаться 16-битный регистр?
>>570544 Вместе с глутом там нихера не ставится. Я весь стаковерфлоу перечитал, но так и не вышло. А менять функционал GLUT'a на какие-то QT фичи слишком долго было.
>>570802 qt это набор либ, а qt creator это IDE, которая заточена под них. По удобству будет лучше VS только если тебе надо пилить много формочек, там можно конструировать их мышкой и вот это все. В плане общей разработки VS удобнее из-за отладчика и остальных плюшек.
>>570829 >>570830 Твой говнокод и рашн-иншлиш комментарии вообще сложно понять. Я не могу понять, что делает твой метод. Берется точка из середины массива. Затем создаются 2 массива с длиной вдвое меньше. И затем все точки распределяются по этим массивам в зависимости от того, элемент больше или меньше той серединной точки. Но ты ведь понимаешь, что кол-во таких точек совпадет с кол-вом выделенной памяти в массивах только в очень редких ситуациях, когда твой серединная точка будет иметь или граничное значение (типа ... 2, 3, 4 ..., где 3 - твоя точка) или такое же значение, как и у соседних точек, но только с одной стороны (... 2, 3, 4, 4, 4..., где первач четверка - твоя точка). Алсо, блеванул с подобных ИНЖЕНЕРНЫХ РЕШЕНИЙ: > Pyl[li++] = Py; > Pyr[ri++] = Py; > strip[j] = Py, j++;
>>570862 Брутфорс - обычное понятие, которое можно встретить и в статьях и вообще везде. И подразумевает решение перебром, без всяких выебонов (что как-бы намекает словосочетание грубая_сила).
>>570862 Эх щас бы в нулевые, когда все ломалось прогой BRUTUS AET (олдфаги уже пустили слезу от названия?), а лохи не знали про расширения и принимали вирусы как фотки.
>>570908 Да. Сосач как обычно соснул со своими советами, и я придумал лучший способ для их генерации: корни из единицы, координаты которых заданы в полярной системе координат, а модуль умножается на 10000 и округляется до целого, чтобы точки были целочисленными. Охуенный способ. Алсо, многоугольник получается идеальный.
И да, в пизду бы эту геометрию. Какие-то мрази пишут книги так, что по их псевдокоду хуй проссышь, как это реализуется при помощи дерева. А все, что гуглится представляет собой жутчайший кал. Подозреваю, что и там, где эти алгоритмы применяются на практике, это такой же мелкобуквенный кал с однобуквенными переменными и т.п.
Сука блять, какие же гниды пишут книги по алгоритмам. Этот рекурсивный алгоритм поиска валится уже на 5000 точек, потому что исчерпывается стек вызовов. Там надо снимать рекурсию и делать вместо нее итерацию, но ебучий Кормен не рассказывает об такой реализации, теоретик ебаный.
>>570915 > корни из единицы, координаты которых заданы в полярной системе координат, а модуль умножается на 10000 и округляется до целого, чтобы точки были целочисленными. Параша какая-то. Что за единицы, что за модуль? Подробнее расскажи.
>>570917 Короче, точки с координатами (cos((pi k)/n), sin((pi k)/n). Замечательны тем, что группе этих корней изоморфна куча всякой хуятины в математике, а еще они располагаются в вершинах идеального выпуклого многоугольника.
>>570922 >группе этих корней изоморфна куча всякой хуятины в математике Какие корни, блять? Ты о чём вообще? Можно точно также задавать точки просто урвнением круга, генерируя рандомно координату x, и находя y.
>>569688 Братишка, можешь пояснить? std::forward вызывается из функции обертки? Или нужно прямо на месте вызова функции передавать параметры форвардом?
>>571087 Врядли. Это хуевый дизайн - совать метода для работы с одной сущностью в класс предназначеный для работы с другой, даже если она связаны так сильно как символ и строка.
>>571277 Можно и с плюсов начинать, просто нужно скипать часть материала, погружаться постепенно. Но все конечно индивидуально. И под "изучить его первым, если ты раньше вообще не программировал" подразумевается не то что ты какой-то другой язык задрочишь, а то что ты неделю-две поковыряешь, к примеру питон, и потом уже будешь решать куда податься.
>>571294 Не можно. Не зная сишки на очень хорошем уровне, и не поебавшись с ней (в стиле if (!get_last_error()) goto cleanup;), начинать с С++ - это плодить очередного крестохейтера.
>>571230 >начинай пытаться что-то писать Мимо проходил, но закончил лафоре и страйструпа. Пытаюсь калькулятор написать, а потом лисп интерпретатор. В калькулятор добавил функции и получилось жуткое говно. А как его в лисп интерпретатор переделать хуй знает. Собираюсь читать книгу про разработку и реализацию ЯП, но это наверно слишком много ради одного проекта. Может есть универсальная книга как не писать говнокод? В шапке Мейерс про это вроде, но книга поле 2012ого ещё только на английском. Есть уже переведённые книги на эту тему?
>>571083 forward используется только в шаблонных транзитных функциях. То есть, когда принимаемый функцией параметр зависит от параметра шаблона, а сама функция нихуя не знает, что с ним делать, и вызывает над ним новую функцию. Вот тогда надо делать forward, а в других случаях это бесполезно, ибо единственное, что он делает - это проверка, является ли его аргумент rvalue, и если да, то работает как std::move. Если ты точно знаешь, что тебе передается rvalue или что не rvalue, то тебе не нужен forward. Если ты сам будешь его обрабатывать, то тебе не нужен forward. Все, чего ты добьешься forward'ом - это передача параметра в другую функцию так, что для этой функции будет казаться, что ее сразу вызвали вместо объемлющей с этим параметром, с сохранением его rvalue/lvalue типа.
>>571306 >Собираюсь читать книгу про разработку и реализацию ЯП, но это наверно слишком много ради одного проекта. Не, это must read для любого программиста.
>>571678 std::vector/std::array в зависимости от того, известен ли размер во время компиляции std::generate + std::random_device std::max_element std::remove_if с условием (&a % height == row_num || &a / height == col_num)
>>571306 >Собираюсь читать книгу про разработку и реализацию ЯП, но это наверно слишком много ради одного проекта. читай книгу с дракончиком Альфред Ахо, Рави Сети, Джеффри Ульман. Компиляторы. Принципы, технологии, инструменты. и не переизобретай велосипед книга лёгкая, няшная, читается на ура
Если я решил встать на путь байтоебства и возможно чистого C, стоит ли читать про компиляторы? В принципе тема очень интересная, ибо слабо себе представляю как они работают
>>572064 Всё наоборот: .length() и .size() предоставляют информацию о количестве элементов контейнера. В случае std::string, про которую он и спрашивал, sizeof(char) == 1 по стандарту, поэтому мой ответ ему более чем достаточен в любом случае.
>>572530 Это самая простая методичка по курсу формальных грамматик на ВМК. Если тебе это сложно, то вряд ли ты вкатишься в компиляторы. Ну разве что найдешь для начала какую-нибудь детскую книгу, где они интерпретатор роботов делают. Логомиры, ДРАКОН или хуй знает что там еще.
Где размещать описание класса и инфу по работе с ним - перед объявлением в .h или перед определением в .cpp? Как описывать .h - сначала все классы, потом все методы всех классов или сначала первый класс, потом все его методы, потом второй класс... И почему? Надо ли в .h описывать закрытые и защищенные методы класса? А область видимости определять где? Глобальные переменные и константы внутри нее?
Сап программач, нужна помощь. Сформировал динамический двумерный массив, теперь нужно удалить строку и столбец с минимальным элементом с помощью realloc. [code]#include <stdio.h> #include <malloc.h> #include <stdlib.h> #define N 3 #define M 3 int main() { int a; // указатель на массив int i, j, mas [N][M], min; // Выделение памяти a = (int) calloc(N, M); // Ввод элементов массива for(i=0; i<N; i++) // цикл по строкам { for(j=0; j<M; j++) // цикл по столбцам { scanf("%3d", (a+iM+j)); } } // Вывод элементов массива for(i=0; i<N; i++) // цикл по строкам { for(j=0; j<M; j++) // цикл по столбцам { printf("%3d", (a+i*M+j)); // 3 знакоместа под элемент массива } printf("\n"); } // Поиск минимального элемента ЩИТО ДЕЛАТЬ free(a); return 0; } [/code]
>>572667 Ну, неймспейс где задавать? В смысле, прям методы в .h объявлять? А документацию куда пихать? Константы и глобальные переменные - это что-то реально нужное, типа числа е или дня, с которого начинается неделя
>>572662 > показали ему какие функции юзать и дали ссылку на cppreference > написал в C-стиле с макросами и malloc Блядь, все-таки насрал, ой мудель блядь. Убери это говно нахуй, щас будешь это вылизывать!
>>572639 >Где размещать описание класса и инфу по работе с ним перед объявлением в .h
>Как описывать .h сначала первый класс, потом все его методы, потом вспомогательные функции (не члены класса)
>И почему? Так Аллах прописал.
>Надо ли в .h описывать закрытые и защищенные методы класса? Ты имеешь в виду что-то типа документации в комментариях или что? Комментариев не должно быть много.
>Глобальные переменные и константы в .h
>А область видимости определять где? >>572685 >Ну, неймспейс где задавать? Или отсутствует в обоих файлах, или везде файлах обёрнуто в один и тот же нэймспэйс. А по-другому у тебя и не скомпилируется, очевидно.
>В смысле, прям методы в .h объявлять? все, вообще ВСЕ объявления только в .h
>А документацию куда пихать? Код должен быть самодокументируемым, в идеале должно хватать знания английского языка при правильных названиях сущностей. Комментариев чем меньше, тем лучше, но они должны быть.
>Константы и глобальные переменные - это что-то реально нужное, типа числа е или дня, с которого начинается неделя >2015 Используй constexpr. Да, в .h
>>572639 Тебе нужно понять, как работает линкер. .h файл копируется между разными .o файлами, а .cpp файл - он один на каждый .o файл. Поэтому обычно в .h файле пишут extern глобальная_переменная, описывают классы и пишут функции на экспорт, а в .cpp файле уже определяют сами переменные, пишут реализации классов и внутренние функции. Но есть и исключения. Например, шаблонный код (сам код, не объявление) нужно писать в .h, и большая часть буста по этой причине находится в .hpp.
>>572964 Прочитай памятку в оппосте: Лабы идут на хуй. Минимальный элемент http://stackoverflow.com/questions/13558081/return-index-of-smallest-element-in-array , на 2d случай обощи ответ заведя вместо int index = 0 ; два индекса int index_row = 0 ; int index_col = 0 ; . Далее передвигаешь все элементы после index_row на строку вверх, затирая таким образом твою строку. Затем - передвигаешь все элементы на столбец влево после index_col. Далее тебе остается пройтись одним циклом и сделать realloc каждой строки (на один элемент меньше), и в конце - финальный realloc.
>>572851 >>572810 Ок, еще маленький вопрос: как с локализацией быть? Раньше видел, как пилили глобальные ассоциативные массивы, в них все языки, в них все фразы... Это наверное не очень подхолит для ООП. Как тут локализацию правильно запилить?
>>572662 откуда вы такие только берётесь? a = (int) calloc(N, M); 1. абсолютно ненужный каст. в чистых сях void хорошо и безопастно приводится к требуему типу. если компилятор выдаёт ошибку, значит ты мудак и пользуешь плюсяшным компилятором. а если ты пользуешься им, значит ты действительно мудак, ибо есть RAII с new/delete и прочими печеньками. 2. sizeof ты его забыл. 3. sizeof оператор, выдающий размер не только типа, но и переменных. то бишь int a; sizeof(a) равносильно sizeof(int) отсюда извлекаем профит int a = calloc(3, sizeof(a)); // это если не хочешь сильно привязываться к типу #define ALLOCATE(num, type) calloc(num, sizeof( type )) int a = ALLOCATE(3, a) #define INIT_ALLOCATE(num, type, name) type name = ALLOCATE(num, type) INIT_ALLOCATE(3, int, a) // со звёздочками как-то запаристо, мож, кто лучше предложит вариант 4. а ещё блять все эти макросы - ржавой ножовкой по пизде. начиная с С99 есть такая штука, как инлайн-функции. вот. изучай
дальше этой строчки кода не смотрел приди ты ко мне сейчас на собеседование, я бы тебя выкинул нахуй в окно к всяким javascript-червям-пидорам
>>573197 > если компилятор выдаёт ошибку, значит ты мудак и пользуешь плюсяшным компилятором. Ты пришел в С++ тред и говоришь кому-то, кто пользуется плюсовым компилятором, что он - мудак. Ну-ну.
>>573197 Я только начал изучать С++.Поясните за всё,что только можно:зачем нужны текстовые редакторы вроде Visual Studio Code, Notepad++ и другие;поясните за другие компиляторы, когда есть visual studio 2015.И чем лучше пользоваться на первых порах.
>>573318 Да понятно, что чел пришел с лабой, и он обязан сделать код с realloc. Нахуя сюда идти с советами "ыыыы че ты как лох". Можно или помочь, или нахуй послать.
>>573333 Visual Studio как IDE идеальна, но она нормально работает только со своим компилятором, а он отстает в поддержке фич стандарта и вообще только для венды. Соответственно, приходится искать альтернативы ей, некоторые юзают другие IDE, а некоторые просто отказываются от IDE и пишут код в умных блокнотиках, вроде указанных тобой. Там нет нормального автодополнения, но зато и ебли с переходом между платформами никакой нет, компилятор полностью отчуждаемый. Кроме того, блокнотики юзают всяческие швабодные фундаменталисты, радикальные олдфаги с тезисом ДЕДЫ ПИСАЛИ В КОНСОЛИ И МЫ БУДЕМ, гнутые фанаты Vim и Emacs и прочие маргиналы.
>>573349 я бы тебе посоветовал не вестись на его напор. этот в своей ненависти к гнутым гикам тоже весьма радикален, как и они. попробуй вимы, емаксы тоже. с мэйкфайлами побалуйся. может пригодится позднее. всё это всего лишь инструменты, не более того. как плотник может любить пилу больше молотка? "мне блять нравится пила и забивать я буду ею. идите нахуй с молотками" смешно же
Завит ли тип данных от размера регистра ЦПУ? Те для процессора с регистрами 32 бита(чистый x86) нельзя задать тип данных long long
И второе: что за тип данных "long double"? В учебнике написано что 10 байт, но компилятор говорит, что 8. И если первый вопрос верен, то получается никаких 10 байт не может существовать тк макс размер регистра 8 байт.
>>573371 Это понятно на самом деле.Не будут же люди юзлесс говно делать,что в нем ебаться потом и страдать линукс не в счет.А если серьезно, то какой же сложный интерфейс у VS.От количества шаблонов только глаза разбегаются.
>>573371 Да какой напор, братюнь? Я ничего против гнутых гиков не имею же, там много своих преимуществ, хоть мне это и чуждо. Максимум могу немного их осадить, если чересчур распроповедуются.
>>573376 Тип данных может зависеть от чего угодно, в стандарте оговаривается обычно только минимальный размер типа. Если нужен конкретный размер - используй int32_t, uint64_t и прочие. int, как правило, самый оптимальный для данной платформы, char - минимальный и т. п. long double - FPU x86 умеет работать с десятибайтными числами, (double - восемь байт), отсюда он и берется. Не очень полезный. Если нужна арифметика учетверенной точности, лучше взять соответствующий шаблонный класс.
>>573376 Зависит. Конкретный размер long long не определен. Но стандарт требует, чтобы компилятор поддерживал типы фиксированного размера, наподобие int64_t, если платформа меньшей разрядности, компилятор обязан обеспечить программную эмуляцию. То же самое касается long long и long double.
>>573404 Ну что ты бампаешь, я же тебе ответил. Ты можешь сделать DEPENDENCY INJECTION используя какой-нибудь ФРЕЙМВОРК, но глобальная переменная (СИНГЛТОН) тут самый простой и естественный способ.
>>573379 Да и хуй с ней с этой сложность. VS + VAX - самая нормальная IDE, работающая из коробки. Надеюсь, что JetBrains допилят там свой CLion до вменяемого состояния.
>>573559 New project -> C/C++ -> Win32 Console Application И без задней мысли пишешь свой хелло ворлд. VAX сможешь найти на рутрекере, там же будет инструкция по установке. В гугле на ангельском найдёшь инструкцию по настройке цветовой схемы.
>>573586 Я смотрел проект, в котором не висят пуллреквесты по полгода, но при этом тот, о котором слышал, а не гитхаб анона. Вкатился где-то за неделю - собрал (на винде, лол), отписал сначала фаундеру-индусу, он не ответил, написал мейнтейнеру. Через месяц где-то получил проект на одеске - встроить V8 в какой-то код, заработал $600, ну и завертелось.
В шараге дали некое задание, не вызывающее затруднений. Но сказали, что передавать значения в main() из подпрограмм нужно указателями. А указывать нужно на массив символов, которые считываются с клавиатуры. Целый день сидел штудировал учебники и гугл, перепробовал много вариантов, но всегда выходят ошибки с инициализацией указателя.
>>573609 Переменные внутри input() не будет видно в main(), делай их глобальными как минимум. Передавать знание - это void input(char parameter1, char parameter2) и т. п. Массивы в таком виде не могут иметь переменный размер, или используй malloc, или выделяй буфер побольше. Пока все.
>>573660 Ну так empty project же. Лол, классный сосет тебе дали. Теперь нажми правую кнопку на папке source files справа, выбери добавить новый файл, назови его main.cpp и в нем пиши. Или пересоздай непустой проект.
>>573663 >>573661 Ладно.Это теперь понятно.Поясните за строчку #include "stdafx.h" Что-то пока про неё нигде не писали, но она есть, когда создаешь не пустой проект.
>>573664 Тебе эта строчка категорически вредна. Ты знаешь, какие функции и прочие константы/макросы etc она позволяет задействовать в твоей программе? Нет, не знаешь.
Плюсы, поясните пожалуйста новичку - я написал простенькую программу на вижул студии. В дебаге есть .ехе файл, который запускает программу. А как сделать чтобы она работала под линуксом?
>>573685 Не хочу через вино запускать программы, которые можно и так сделать под линукс. Там простенький код на ++. А как сделать кросс-компиляцию? Вижуал не компилирует под линукс?
>>573703 Автодополнение? Ну, первое время я ручками всё вбивал, т.к.скорость моего кодирвоания была порядка 10 строчек в день.
Сейчас скорость кодирования новых строчек в день ещё ниже, но переписываю старое. А вообще нахер, эта штуковина именно в Студии иногда сжирает что идёт после, так можно очень классно прострелить себе ногу.
Нужно написать для курсового проекта простенькое клиент-сервер приложение используя mfc либо winforms. Посоветуйте литературы || видосов || ресурсов нюфане.
>>573809 А кому? На сайте был один имейл, откуда я знаю, как у них что. Это сейчас там 2 имейла висит. А потом я выковырял имейл мейнтейнера из гитхаба, он мне ответил на вопросы.
>>573968 Такой, что видимость имен из анонимных неймспейсов не до закрывающей скобки, а до конца файла. И их из-за этого можно и нужно юзать вместо глобальных static.
>>573683 >>573694 оборачиваешь платформо-зависимые вещи в красивые обоиобёртки. внутри обёрток ifdef'ишь. рядом с визуальными файлами херачишь makefile'ы. профит1 я так делал кросс-платформенный чятик для линуха и винды курсе эдак на втором.
Подскажите в чем косяк? Только начинаю учиться. Копирую пример из книги, а компилятор ругается на ошибки. То ли я ебанутый, то ли книга хуевые примеры дает?! Даже ебучий хеловорд не печатает! Перепробовал дохуя иде, а результат один.
>>574268 Еще спрошу: читал, что в си очень плохо все с графикой, то есть порисовать всяких снеговиков, как в паскале, тут не получится. Я подтвердил сам себе, когда подключал какую-то графическую библиотеку к девсиплюс. После этого у меня там даже хеловорд переставал запускаться. Лечил все переустановкой. Это действитьельно так, си не дружит с графикой, или проблема опять во мне?
>>574281 Из коробки ся не имеет ни малейшего понятия ни о консоли, ни о графике. Со сторонними либами все очень хорошо с графикой, но надо будет разобраться сначала с ними.
>>574285 >надо будет разобраться сначала с ними Ключевое слово! Я оказался к этому не готов, хотя перегуглил, наверное, весь инет. Ладно, оставлю это на потом.
И еще момент интересен: почему в разных книгах так отличается синтаксис программ? Это старый и новый стили? Какой лучше использовать? Для себя решил, использовать лучше тот, какую книгу решишь читать. Например, две проги на сложение:
// Программа сложения, показывающая сумму двух целых чисел. #include <iostream> // позволяет программе производить ввод/вывод
// функция main начинает исполнение программы int main() {
int number1; // первое из складываемых чисел int number2; // второе из складываемых чисел int sum; // сумма number1 и number2
std::cout << "Enter first integer: "; // запросить данные std::cin >> number1; // прочитать первое число в numberl
std::cout << "Enter second integer: "; // запросить данные std::cin >> number2; // прочитать второе число в number2
sum = number1 + number2; // сложить числа; записать сумму в sum
std::cout << "Sum is " << sum << std::endl; // вывести сумму
} // конец функции main
#include <stdio.h> #include <conio.h> main() { int a, b, c; // объявление переменных printf ( "Введите два целых числа \n" ); // подсказка для ввода scanf ( "%d%d", &a, &b ); // ввод данных c = a + b; // вычисления (оператор присваивания) printf ( "Результат: %d + %d = %d \n", a, b, c ); // вывод результата getch(); }
>>574319 Первое впечатление. Стандарт сей - 300 страниц. Плюсов - 1000. Разница не только в синтаксисе, но и в способах решения задач, в идеалогии и мышлении.
Есть тут кто программирует на линуксе? Поясните, я читаю что gcc компилирует файл, создал простой хулло ворлд, а он мне ошибки пишет: error trying to exec 'cclplus': execvp: no such file Я гуглил, вроде на некоторых сайтах пишут про g++, а на некоторых что надо использовать gcc. Я не понял ничего, поясните пожалуйста.
>>574348 gcc - это одновременно и название программы компилятора сей, и в тоже время название семейства компиляторов, использующих один бэкенд и промежуточное представление кода. g++ - компилятор из этого семейства для плюсов. когда в контексте плюсов упоминают gcc, имеют в виду g++
>>574357 Ну тот факт, что мои ответы совпали со вторым аноном, который тебе отвечал, ещё не означает, что это истина в последней инстанции. Так, пишу на всякий случай.
Подскажите, нормально ли программировать на ++ на линуксе? Я просто пишу в .сс файлик и его компилирию в g++, не очень удобно, но все ошибки выводит в терминал.
Что код не должен быть переносим.
От байтоебства к жизни нет возврата -
Задачам ты найдешь ответ своим
Без утоленья помысла иного,
Который в сердце у тебя таим.
Затем решишь проблемы те же снова,
И трижды, и еще раз впопыхах,
Подстегнутый заказчиком суровым.
И вскоре со слезами на глазах,
Средь ста платформ терзанием объятый,
Тщась побороть пред оверхедом страх,
Будешь хулить свой инструмент проклятый.
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20%, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, что не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задач.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
<устарело> Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
<устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
<устарело> Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4527.pdf
Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Ссылки:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru/
Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me/
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w/
Блог Герба Саттера (на ангельском) - http://herbsutter.com/
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru/
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++/
Видео с CppCon (на ангельском) - http://www.youtube.com/user/CppCon/videos/
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq/
Куда писать код:
Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Софт и библиотеки:
IDE, призванная похоронить Visual Studio пока не особо получается. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion/
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net/
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com/
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock/
Йоба-набор библиотек, способный удовлетворить даже самые скотские фантазии - http://www.boost.org
Библиотека для удобной высокоуровневой работы с сетью (ахтунг! утягивает за собой boost, openssl и даже Аллаха) - https://casablanca.codeplex.com
Простая в обращении библиотека для работы с графикой и аудио - http://www.sfml-dev.org
И многое другое - http://en.cppreference.com/w/cpp/links/libs
Памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий: