Это копия, сохраненная 16 июня 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Перекат пилить забота
Стала делом крестоёбов.
Только где взять стихоплётов?
Старший брат: >>723844 (OP)
Предыдущий: >>736493 (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: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Не по фэншую.
Ты не ту студию скачал, та что у тебя просто блокнот для редактирования кода.
У pictureBox стоит StretchImage, то есть картинка запихивается в ящик. Ящик квадратный, 120 на 120 пикселей, поэтому, когда картинка не квадратная она там отображается сплюснотой. Решение - поменять высоту ящика, сделав его не квадратным.
Почему вот эта параша не работает? Должна ведь.
pictureBox1->Size.Height = 100;
Это нормально что студия запускается с какой то непонятой хуйни?
Хоть бы шапку прикрепил
Blend для Visual Studio — это набор инструментов для разработки, входящий в Visual Studio 2013, который позволяет создавать приложения для Магазина Windows в визуальной среде с использованием языков JavaScript, VB, C# и C++
Но у меня 2015 студия. А так добра. Просто непривычно. Да и только с нее Vs и запускается.
Нет, ярлыка чтобы сразу понятно было. Ну ты понел.
Спасибо. Хотя я уже успел пригореть от МОДУЛЬНОСТИ решений. Но как быть дальше?
Теперь удаляй
да ты заебал пиарить это говно. Ньюфагу нужно начинать с минимума абстракций, а ты ему предлагаешь сперва настроить IDE. Пусть юзает VS или QtCreator для начала.
Как запустить Prog1 из консоли? Перед ним стоит какой-то символ похожий на S.
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::end1;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::count <<"The sum of "<< v1 << "and" << v2
<<"is" <<v1+v2 <<std::end1;
return 0;
}
Лучше уж пусть тогда ставит cygwin, собирает ручками и пишет Makefile'ы
Ща погодь, надо тщательно сравнить.
Все понял, после 0, а не ;
Не, там запятая тоже стоит.
Причем студия принимает только со всем набором.
Один иострим она вертела на хую.
#include "stdafx.h"
#include<iostream>
using namespace std;
Пусть сразу на коллайдер идет работать ученым, хуле. В самом начале, нужно просто открыть проект и писать код. Лучше всего подходят QtCreator и VS, где все из коробки.
З.Ы. ловко обращаюсь с Qt
напиши построитель диаграмм классов из C++ кода.
Завидуй молча.
Эталон того, как не надо делать перекаты. ГДЕ ШАПКА ЕБАНА В РОТ?
А ведь можно зделоть. Нафигачить классов, так чтобы все операции возвращали не результат, а дерево выражений. Наверняка есть уже такое где-то. Потом переводить выражения в код для куды, дифференцировать, все так же как и в теано.
Напиши stream api для c++, чтобы лениво можно было работать с потоками данных. По-моему, это интересная задача.
Интерфейсное говноприложение для тестов. Простенькая бд, редактор тестов, режим преподавателя, режим студента. У нас такое дипломники делают, но можешь как крусач взять, там дел на пару дней.
Сижу, баги есть (в подсветке ошибок, дебаггере), порой подтормаживает. Во всём остальном работает нормально.
Clion офигенный, скажу сразу что я приверженец продуктов от Jetbrains.
по факту у них одна иде под многие языки и ежели привык к фичам, то самое оно.
по факту у них одна иде под многие языки и ежели привык к фичам, то самое оно.
// но я юзаю другую иде. и нах не надо джет тормознутое на яве
игровой проект пиши.
Ты как-то неправильно работаешь с массивами. Не используй C-шные массивы, используй std::array или std::vector.
у тебя проект с precompiled headers. для нее его обязателен stdafx.h
создай пустой проект, в нем cpp файл. и в него напиши main функцию. и все будет работать без студийных прибамбасов
Рекомендую AddressSanitizer, замечательная вещь, с которой теперь только и пишу.
Добра, вот бы еще страуструпа осилить. Начал его книгу читать, но этот мудак впихнул файл #include"std_lib_facilities.h"
Понятно, что даже в любом онлайн компиляторе работать не будет, как и в студии. Я конечно, могу хелло ворлд написать и на иостриме там, но хотелось по книге идти.
Он там предлагает скачать файл, я вроде по инструкции делаю, копирую в блокнот, вставляю в студию в хедер, переименовываю, но шаги 13 и 14 непонятны и поэтому ничего не работает.
Посоны, сократил по максимуму. Почему у меня происходит heap corruption в момент вызова HeapFree()?
Тоже самое у меня происходило при использовании new [], delete [].
Расскажите что это за ебаная куча и почему она корраптится.
Да. Этот файл для шиндовс. Такие дела.
Потому что ты не шаришь в указателях. Ты не копируешь строку в вновь выделенную память. Ты просто меняешь значения указателя и передаешь указатель на память не из кучи в heapfree. А теперь пошел нахуй, неуч злоебучий. Книги надо читать сначала, а не с горящей жопой пытаться осваивать по верхам.
страуструп - очень плохая книга для начала. читай шилда или еще какие для начинающих.
Липмана лучше
Если такая штука как valgrind, которая умеет отслеживать утечки памяти, обращение не в свою память, всякие прочие проблемы с кучей.
По работе с когом он лучше вообще всего, кроме студии. Где-то за ними плетётся кутякреатор, а дальше блокнотики с подсветкой кода вроде гном/кдебилдеров и кодблоксов.
Прррррр
>По работе с когом он лучше вообще всего, кроме студии.
Поехавший? По код ассисту студия не всасывает разве что у блокнота. Большие-проекты-кун гарантирует это.
>Где-то за ними плетётся кутякреатор, а дальше блокнотики с подсветкой кода вроде гном/кдебилдеров и кодблоксов.
Поехавший чтоле? У Eclipse CDT навигация по коду уровня CLion, а то и лучше. В рефакторинге немного проигрывает. Плюс, это единственная ide такого уровня, которая просто открывает makefile проекты.
>Поехавший?
У меня только с бустом были проблемы.
Те же исходники шланга с ллвмом вполне себе быстро открывается и студия с ним вполне себе работает (если не считать получасовой+ индексации).
>навигация по коду уровня
Заодно шрифты и гуй из шиндовс 98.
Уточню: рендеринг шрифтов.
Компилятор своего языка на ллвме конечно же, что ещё можно писать копаясь в этих исходниках.
И чем makefile отличаются от cmake в плане написания, уважаемый?
Ну на вскидку: поддержку новой платформы, поддержку новых фич C++, прототипы фич для пропосалов в C++ стандарт, пилить static analyzer
http://ideone.com/tcUulk
Вот есть код из книги. Выполняю я упражнение, там написано напишете прогу для сумирования чисел от 50 до 100. И это я сделал, но вот что не понятно.
если мы задаем val = 1, то по логике выходит что 1 операция = 2, ибо val = 1+1=2.,
Причем если значения val = 0, то все збс (по логике, проверял в тетради)
Я то думал что val это просто значение переменной, но нет, это означает реальное стартовое число. Погромач обоссы.
Если выставить значение val =1 и val= 0, то результат будет одинаковым.
Мамкина элитка порвалась.
>>750227
Не понятно чему при val =0 и val = 1 результат будет одинаковым(такого не должно быть).
Блять. При val = 0 при первом проходе:
sum = sum(0) + val(0); //0 = 0 + 0
++val; /1
при втором проходе
sum = sum(0) + val(1); //1 = 0 + 1
++val; /2
При val = 1
sum = sum(0) + val(1); //1 = 0 + 1
++val; /2
при val одна итерация просто "лишняя"
мы должны еще к val прибавить 1, а поскольку val обладает уже значением единицы то 1+1 блять.
Потому вставить этот val ( со значением 2) в
sum += val
А все ясно. Вот это годно было.
Ну смотри, вот val = 0, но по коду(val=val+1) мы должны к нулю прибавить 1.
А потом вставить в сумму sum = val + sum(тут val у нас уже 1)
Аа.. мы должны тут(val=val+1) 0 должны прибавить, да? Пардоньте, мсье.
Код выполняется последовательно. Сначала ты суммируешь sum = sum + val; //0 + 0
потом инкрементируешь val на 1, проверяешь условие цикла val <= 50 //1 <= 50, поэтому снова попадаешь в тело цикла. В цикле вторая итерация опять суммирует
sum = sum + val; //0 + 1 = 1
++val; //2
Опять проверка условия цикла и опять в тело попадаешь
sum = sum + val; //1 + 2 = 3
и так до выхода из него.
Это твой первый язык программирования?
Да теперь доходит, добра.
http://llvm.org/docs/tutorial/
Кстати, забавно сравнить C++- и OCaml-версии.
Первое выглядит унылым говном на фоне второго.
Пусть симейк осваивает сразу. Бестс практис.
Ловите невфака.
Шилд, блядь, это такой экран чугунный, который образовался между твоим котелком и окружающим миром и мешает тебе расширять словарный запас. А фамилия автора - Шилдт. Как содержимое твоей репки на английском, только буква 'д' добавлена.
получается нужно выирать самый частый символ и записывать его в новую строку, это и получится искомое слово?
while
Кстати может быть случай когда нет решений. Нужно прогу допилить на этот случай. Что в условии про это? Давай линк сам зарегаюсь, почитаю и отправлю.
на первом тесте валится
> У вас нет прав просматривать это соревнование
На кодфорс их не перезаливали? вк вроде так делает
> Известно, что как минимум одно слово из этого набора было набрано без ошибок, а все остальные слова отличаются от него не более чем в одной букве.
Важную часть пропустил. Нужно функция сравнения. Щас поем и сделаю.
Джо Саттис.
все тесты успешно пройдены https://ideone.com/ItNqwe
очень некрасиво эти break и много ifов. Как красивее записать кто может?
Обалдеть. Подскажи, пожалуйста, как заниматься, чтобы до твоего уровня дойти? Посоветуй
Итак, теперь я могу отслеживать мышь, но есть проблема.
Я создал евент для ФОРМЫ чтобы при движении мыши ее координаты писались в лейбл. Проблема: мышь залезает на территорию какого-нибудь объекта, на котором ее координаты не считываются. Как исправить? Вот код:
private: System::Void Get_MPos_Move(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{
double x1, y1;
x1 = this->Location.X - Cursor->Position.X;
y1 = this->Location.Y - Cursor->Position.Y;
label1->Text = System::Convert::ToString(x1) + " " + System::Convert::ToString(y1);
}
месяц не занимался обычно 2 когда особенно готовился то 6
но решил ведь задачу нормально, значит можешь. Самообразованием занимаешься или еще где учился?
>решил ведь задачу
решение в лоб. никакого алгоритма нет. будь ограничения больше задача бы не прошла
>Самообразованием
оно
Глянь опытным глазом. Вот здесь https://ideone.com/TIGgqK
Нужно, вообщем, чтобы на ЭКРАн выводилась сумма каждой итерации.
1) 10-1=9
2)10- 2 = 8
ну ты понел, у меня только конечный результат пишет.
Кстати, по идеи, если не стоит val = 0, то разве компилятор не должен считать бесконечно в -?
До нуля, забыл написать.
В твоем случае будет просто идти отчет от 10 до 0.
А в том коде будет примерно
1)10= 10-1 = 9
2)9= 9-2 = 7
3)7 =7-3=4
и вот на экран нужно каждую итерацию вывести.
и тд.
Я лоу левел, не понимаю про что ты. Пишу на с++ в виндоус формах. IDE - visual studio 2013
А самописное как делается? winapi? Мне бы гайдов. Я находил в инете, но у меня даже окно не запускается. Много перепробовал.
под самописным я имел ввиду кнопки на opengl.
https://wiki.qt.io/Qt_for_Beginners
а лучше, пока что, попиши консольный бред. Алгоритмы там и прочее.
если плохо с англ. погугли на русском. Ну и видосы на ютьюбе есть.
конкретна эта задача на три строки
int val = 10;
while(val)
{
std::cout << val;
val--;
}
И, таки да. Не забудь прочитать про разницу между префиксным и постфиксным ( val++ / ++val )
>Знает разницу между постфиксным и префиксным декрементом
>Все еще использует постфиксный декремент
Молодец. Возьми с полки чупа-чупс, заткни им жопу. Это ненадолго остановит пламя.
Вот почитай про отличия между вариантами и поймешь, почему на отдельной строке лучше использовать префикс вместо постфикса.
>>751028
на, сам почитай https://msdn.microsoft.com/ru-ru/library/e1e3921c.aspx
>Операция инкремента или декремента выполняется после вычисления операнда. Эта особенность возникает, только когда постфиксная операция инкремента или декремента выполняется в контексте выражения.
Теперь объясни мне серому, или лучше пример приведи, где инкремент отдельной строкой будет лучше префиксным
Не гони. По любой хуйне такое уже есть. Мне просто нужно написать несколько хуевин, но я не готов ради них читать 5к страниц по чистым плюсам, бутстрапу, кьюту/гтк, etc...
http://academy.cppstudio.com/
но там только основы
и иногда не очевидно, отчего тамошний компилятор не принимает, вроде бы, парвильное решение (ах да, фигурные скобочки не стоят, где не обязательно; и подобное )
хотя всё не так плохо для начала
Хотя бы что-то вроде http://www.w3schools.com/tags/ref_byfunc.asp и htmlbook, я хуй знает, чтобы не ебать гугл каждый раз и читать хуету из 2003
что это?
Это все бесплатно?
Вот мне что-то такое, можно даже без интерактива,
>Хотя бы что-то вроде http://www.w3schools.com/tags/ref_byfunc.asp и htmlbook
но по более серьезным вещам. Контейнеры всякие типа МАП, ЛИСТ, регекспы, высокоуровневая работа с ФС, Win32_API, создание гуя, работа с DOM...
Мне кажется, только перечисленная хуйня потребует книг 5, нет? А онлайн референсы? Какие-то сайты хотя бы по отдельным темам? Чому у всех есть, а у плюсов нет? Алсо,
>>749082 (OP)
Почему первая ссылка ведет на Липмана, а не Страуструпа или Прату?
И есть ли смысл чтения последнего, если страус вышел на 4 года позже? Там ведь новые стандарты вышли...
Чего сложного, чего там старого и чем липман конкретнее новее (выйдя еще даже до 2015) и проще? Вот чем он реально проще, чем так сложен страус? Уж проще праты только шилдт наверное. Почему его нет кстати?
Страуструп в первом же примере с хелло ворлд пишет: #include"std_lib_facilities.h"
И, понятно, что такого хедера нет. Попробуй пропиши в онлайн редакторе или студии.
Он конешно предлагает закинут этот файл в студию, но я пробовал, но шаги 13 и 14 не понятны и вообщем забил пока что на него, вернусь попозже.
Хочется, по книге идти, где можно использовать примеры и разбирать их без танцов с бубном.
Я имею ввиду, в основных. Ну ясное дело, что старее, но несильно.
>>751085
Может просто стдлиб попробовать? Что же там за пример такой?
пример
#include"std_lib_facilities.h"
int main{}
{
cout<<"Hello, World!\n";
return 0;
}
>Может просто стдлиб
А может и ионстрим попробовать, ну а что, хелло ворлд написать и так можно. Танцы с бубном же.
Я уже спать иду..
>значительно
Не говорили такого.
Первой может быть только 1 книга и липпман победил благодаря году издания, который нихуя не значит.
Я просто выбрал учебник. Первый же пример из книги не работает, а автор предлагает пердолясь закинуть нужный файл.
Не знаю, чего вы там батхертите, обязательно вернусь к Страуструпу, но после того как пройду учебник для новичков по языку, где есть рабочие примеры.
Но прата интуитивнее, а его подача способствует изучению, практике его примеров, а не тупо сидению с учебником ридонли. В свое время, когда я выбирал между липпманом и шилдтом, мне посоветовали прату, и не зря.
Но прата интуитивнее, а его подача способствует изучению, практике его примеров, а не тупо сидению с учебником ридонли. В свое время, когда я выбирал между липпманом и шилдтом, мне посоветовали прату, и не зря.
И дело не в первоте в списке, а вот этой самой первой ссылкой создается впечатление, что липман какая-то особая годнота.
Кек))) а липман хоть про 15 (теперь серьезно, если нет, то он вообще нихуя не старее ни разу)?
Очень содержательный ответ, и смешной, молодец.
Так пусть уёбывает 1с программировать.
В книге всё предельно просто и понятно. И что такое include тоже объясняется.
Я что, спорю? Я не понимаю, нахуя старого жида запихнули во всея сишников первыя книгу вместо трупа/праты
Запустите мой бинарник. Работает?
Если компилятор не оптимизирует будет лишняя трата тактов процесора
Половину из этого писал не я.
http://pastebin.com/WBrRhmCS
Потому что в студии прокатило успешно.
> в книге всё как в остальных только читать дольше т.к. сложно написано
> неосилил уёбывай
Ну и зачем жрать говно? С непривычки не переваришь. Когда выучишь кресты тогда читай страуструпа
Учи, не хочу. Хочу жрать говно ныть на дваче про свою неосиляторность
О это про меня. Читаю книгу не могу осилить упражнение. Мега простое, но такой вот я тупой пиздец.
Вот мне что-то типа вашей этой академи, да, можно даже без интерактива,
>Хотя бы что-то вроде http://www.w3schools.com/tags/ref_byfunc.asp и htmlbook
но по более серьезным вещам. Контейнеры всякие типа МАП, ЛИСТ, регекспы, высокоуровневая работа с ФС, Win32_API, создание гуя, работа с DOM...
Чтобы каждый раз гугл не ебать.
>>751603
Ура, я не тупой! Сделал!
https://ideone.com/v6SzN3
Посмотрите плиз, правильно? а можно также только while сделать? в книге просто на момент задания for еще не юзался, но я схитрил и заюзал.
Ньюфаг, я понимаю, что ты еще мало знаешь и все такое, но ты реально срешь в тред своим нытьем.
Вот тебе совет, как нужно учиться:
- Составляешь список литературы и ресурсов, где брать информацию
- Читаешь материал, пробуешь примерчики, разбираешься во ВСЕХ моментах, которые тебе не ясны
- Придумываешь себе задачку, экспериментируешь.
Все это можно выполнить без этого треда, я гарантирую это! Этот тред - илитный и предназначен для сложных и неочевидных вопросов, а также высококвалифицированных срачей.
А теперь съеби в ньюфаг-тред и не заходи сюда до тех пор, пока не напишешь свой простенький компилятор.
Истинно так. Давай, парень, не шали, а то милиционера позовем.
>>751687
Что здесь было?
1. Размер массива не 368, а 18 446 744 073 709 551 616.
2. В скобках пишется строка, а не число.
3. Сделать нужно на чистом С.
Компилятор задолбал ругаться когда я писал без std::, потом я добавил пространство имен, а вверху ввод забыл поправить.
>>751680
Я сам не знаю где брать такие задачи. Данная из книги C++ Primer, 5th Edition.pdf
>>751683
Благодарю за развернутый ответ, илитарий. В этот тред я написал, т.к подумал что хрен решу задачу, однако все же решил. Я не сру в тред, первый раз написал. А в ньюфаг-треде одни такие же раки как я, кто мне там поможет?
В том треде на крестах 3 решения и все абсолютно разные. Уверен можно ещё сделать.
#include <iostream>;
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
float x, y, z;
cout << "Введите пожалуйста первое число: ";
cin >> x;
cout << "Введите пожалуйста второе число: ";
cin >> y;
z = x + y;
cout << "Сумма двух числе: " << z << endl;
system("pause");
}
Нахуй ты пишешь std?
Извини. Я просто зашел сюда искать какой нибудь полезной информации в спорах между анонами.
Памяти не хватит в любом случае, даже если предположить, что на каждую функцию в массиве уйдет один байт. Мастерство в умении избежать необходимости делать говно.
Да даже по первому.
Бамп
Ебать, все крестовики такие упоротые? Нет QtCreator лучше.
Мимо java-бог в девичестве плюсовик
Он пошёл учить D, а потом спился насмерть узнав что такой язык был а он кушал фикалий. кекус
Стих на инглише наверно пишет.
Рак, убивающий /зк.
Может памятку ньюфага повыше в шапке поднять?
Дежурно сходи нахуй со своим бампом. Совсем ньюфаги охуели - еще и бампают свои высеры.
Отсосу.
#ifdef WIN
typedef WinWindow Window
#else
typedef LinuxWindow Window
Я думаю это не правильно. Как сделать правильно?
Qt заворачивает весь платформозависимый код условно в один класс: платформонезависимый интерфейс находится в хедере, а платформозависимый - в cpp файле для каждой платформы.
Т.е. есть Window.h и есть WindowWin.cpp, WindowMac.cpp и т.д. Затем в системе сборки в зависимости от target-платформы определяется, какой cpp'шник будет компилироваться.
идею понял. Правда я не про qt говорил. А вот допустим у нас есть отдельные дескрипторы для win и mac окна. Как мне их тогда объявлять в хедере?
Я Qt привел для примера. Дескрипторы, как и весь платформозависимый код, не должны появляться в хедерах ни в каком виде.
Другой вариант - сделать интерфейс Window и наследовать от него WinWindow и LinuxWindow. Инстанциировать под ifdef'ом, естественно.
>Дескрипторы, как и весь платформозависимый код, не должны появляться в хедерах ни в каком виде.
Хм... А как тогда?
window.h:
class Window {
//methods declarations
};
windowWin.cpp:
//methods definitions for Win
windowLinux.cpp:
//methods definition for Linux
Makefile:
linux: window.h windowLinux.cpp
g++ -o window.o windowLinux.cpp
win: window.h windowsWin.cpp
mingw -o window.o windowWin.cpp
Спасибо всем, аноны!
причем тут тайпдеф??
оно все, конечно, круто, но вот вопрос: выходит ли это за рамки игр с фичами языка, и используется ли это кем-то, кроме александреску и разрабов boost, в реальных проектах? просветите, а то не могу ничего годного найти
Используются ли на столько замудренные способы - не знаю, но я использую, особенно когда приходится иметь дело с параметрами разных типов, чтобы не было копипасты и трудноподдерживаемого кода.
>параметризация алгоритмов и структур данных, например, параметризованный сортер для дерева, или параметризованная underlying structure для кучи, кастомные аллокаторы и прочая мета
Это все называется паттерном "Стратегия". Ничего сверхестественного здесь нет. Да и вообще в шаблонах тоже нет. Всего есть до пяти приемов, которые формируют полноту по Тьюрингу. Но даже зная их, нормальные люди не страдают хуйней по типу написания парсеров на шаблонах, потому что эта ебота получится write-only, без возможности отладки и будет компилиться часами. Короче говоря, нормальные люди в таких ситуациях использую решения, написанные на полноценных языках.
>Всего есть до пяти приемов
а можешь написать, что это за приемы
>решения, написанные на полноценных языках
лол, а кресты не полноценный язык?
>а можешь написать, что это за приемы
В целом, для реализации всего на свете нужны только условия, циклы(или рекурсия) и память. Условия в шаблонах - by design, рекурсия - через числовой параметр шаблона, память - через константные статические переменные. Все остальное - уже надстройки над этими тремя средствами.
Пардон, условия не by design, а через LUT в виде специализаций шаблонов(traits).
look up table
Суть в том, что нужна не простая сортировка, а что-то вроде распределение ключей в хеш-таблице, которые (ключи) зависят от ее размера. Соответственно изменяя размер необходимо полностью поменять положение элементов
Ну так ты сначала меняешь размер, а потом пересортировываешь вектор уже с новым размером. В чем проблема?
Или я чего-то не понимаю?
>>752761
бля, я ебаный ньюфаг и не могу объяснить задачу, гоните меня ссаными тряпками нахуй.
У меня есть что-то вроде хеш-функции:
Каждую позицию вектора занимают данные, а позицию я высчитываю с помощью функции, которая зависит от размера таблицы.
Возникает ситуация, когда надо изменить размер таблицы, соответственно просто сделать ресайз не получится, нужно по новому прогнать все элементы, так как их позиции уже изментся в связи с изменением размера таблицы.
Я делаю так: помещаю исходные элементы в новый вектор, изменяю размер исходного, очищаю его и потом последовательно переношу из временного вектора данные в новый уже с новыми ключами.
Можно ли это сделать как-то без создания доп. вектора?
>просто сделать ресайз не получится, нужно по новому прогнать все элементы, так как их позиции уже изментся в связи с изменением размера таблицы.
Обычно именно так и делают. Твой способ годится только для RT систем, где проще выделить память, чем проебаться с рехэшом.
В векторе есть пустые ячейки и занятые? Не проще мап взять? Проблема возникает только если тебе 1 элемент надо положить в уже занятую ячейку? Тогда можно рекурсивно искать элемент который можно переложить в пустую ячейку. Типа поиск в глубину. Тогда проблема может быть только с зацикливание. Что делать если наткнулся на цикл понятно. Тупо переложить все элементы по очереди. Сложнее его задетектить. Наверно надо множество создавать в котором будут номера элементов которые уже переложены на свои места и их нельзя трогать. Или только те элементы что посещались в момент рекурсии. Тогда с каждой выходом из рекурсии его можно очищать. Ну и осталось по очереди все элементы перебирать и заново функцией хэш считать. Должно быстрее работать. Правильно условие понял?
http://www.interstron.ru/developers_means2.html
бля, ты условие понял правильно, мап не покатит, т.к. каждая ячейка имеет много полей (структура). Исходя из твоих слов я понимаю, что будет проще все таки с вторым вектором
Уже и опечататься нельзя.
Как организовать цикл по any_iterator'ам, если их даже нельзя сравнивать? В доке найти пример не могу.
std::string нельзя?
Компилятор всё правильно говорит, нельзя так присваивать:
C++ forbids converting a string constant to 'char*'
это не лаба
>>753120
Почему в vs на этом этапе ошибок нет вообще? Да и сообщение о исключении появляется только под конец выполнения. Там вообще эти строчки не используются.
Маллоком. Создаешь новый буфер нужного размера, копируешь туда элементы, старый удаляешь.
Или как вариант держишь два вектора. В одном сами элементы в произвольном порядке, во втором твоя хэш-таблица с индексами элементов. При ресайзе очищаешь вектор с индексами и перестраиваешь заново.
Простая обертка над маллоком удобнее new, new[], delete, delete[].
Вопрос скорее идеологический, если человек разбирается с плюсами логичнее использовать его функционал.
Бля, судя по всему, только бустовским for_each.
Бля, пиздец. Вроде бы ещё Майерс в одной из старых книжек писал, что не нужно пытаться писать контейнеронезависимый код.
Если у тебя не цель показать использование выделение памяти (без ее освобождения), то используй вместо char[] std::string (как уже подсказали выше), а вместо char test; std:vector<std::string> test; Возложи заботу по управлению памяти на плечи разработчиков замечательного STL. И падения скорее всего прекратятся.
ВНЕЗАПНО new и delete – это и есть простая обёртка над маллоком. Использовать "голый" маллок (или системный апи для этого) нужно только в совсем гурманских целях игрищ с байтами.
Ты пытаешься сделать хештаблицу?
Бля, съеби. Удобнее ему вручную высчитывать занимаемый размер, а потом еще и кастить. Ага, конечно.
third-party либа, в публичном struct'е поле спрятано за #ifdef. Внезапно разошлись дефайны при сборке самой либы и использующего ее кода
Выше всё цитаты. Это к вопросу о реальной, а не выдуманной жизни плюсовиков. Убогая система модулей, отсутствие кросс-платформенных пекеджей. А не ололо-шаблоны и ололо-утечки.
http://nponeccop.livejournal.com/491404.html
Почему мап не подходит? Он никаких ограничений на тип не накладывает
внезапно, new умеет вызывать конструктор (размечать память). а delete вызывает деструктор (корректно очищает память объекта
А еще эксепшены кидать
есть массив объектов допустимто. как написать структуру бинарного дерева, элементами которого являются эти объекты. например взять и вывести потом инфу этих объектов последовательно. Типо пишем struct A {class-type o[100]; class-type left; class-type right;} Или что? как это вообще работает?
лефт райт указатели
Ну да, именно так это и делается. Ты создаешь структуру, в структуре у тебя находится указатель на левого потомка, указатель на правого потомка и сами данные.
Примерно так:
struct BinTree {
Data data;
BinTree [pointer] left;
BinTree [pointer] right;
};
BinTree* tree = new BinTree;
tree->left = new BinTree;
tree->right = new BinTree;
и так далее.
Как вывести -- да как хочешь, обходи дерево хоть в глубину, хоть в ширину, как тебе нужно и удобнее.
мимо
Ржавый в том имеет уверенное лидерство
Покажите хоть один юзкейс, где кресты помогают решить задачу быстее и легче, чем в голом си?
Например? О каких обертках ты говоришь?
>Покажите хоть один юзкейс, где кресты помогают решить задачу быстее и легче, чем в C
Как там твои обобщенные типы на макросах? Или, например, не заебался еще структуры из одной иерархии друг к другу кастить, чтобы сделать ООП? И все это без вменяемой навигации в IDE. Или, к примеру, нравится выводить размеры для маллока? А потом инициализатор вручную вызывать? А ручками RAII хуячить не остоебенило?
ООП нинужен
СИ — СИЛА. СИ++ — МОГИЛА.
Этот чувак, кстати, разрабатывает настоящую (а не как сейчас) анонимную имиджборду:
https://www.youtube.com/watch?v=hL3AnIOfu4Y
Профессор Стэнфорда потому что, а не любитель паралимпиадного программирования из ИТМО.
У него не так сортировать надо. Скорее переупорядочить. Ему нужно переложить элемент из одной ячейки в другую, а номер другой ячейки говорит функция.
А ты, видимо, любитель пропускать бквы в слвах.
Что конкретно не понятно? Указатель? Указатель на int или указатель на любой другой тип?
Что такое указатель мне понятно. Не понятно, что такое "указатель на int"
Видимо не совсем понятно, что такое указатель. Из-за статической типизации при обращении через указатель компилятор будет ограничивать считываемую память размером типа (в твоем случае int, причем он может быть разного размера на разных целевых платформах).
Все на Си можно, что на плюсах. Но нахрена лепить велосипеды в Сях, когда есть более удобные инструменты. Особено когда лепят костыли из препроцессора и массивов указателей на функции.
У тебя есть участок памяти на которые указывает указатель. У тебя там куча байтов. А указатель указывает на 1 байт. Если ты не скажешь ему тип, то компьютер не поймёт что с таким указателем делать. А так ты говоришь что это int и тогда очевидно что следующие 4 байта будут принадлежать тому участку памяти куда указывает указатель. И компьютер понимает что 2 этими 4 байтами надо обращаться как с intом. Будь указатель на unsigned int, а байты в памяти лежали те же самые, то программа обращалась бы с ними по другому. Понятнее?
1. Долгая компиляция это зло. Отсутствие модулей это плохо. Мы все страдаем от этой проблемы, но попытка быстро-быстро перепилить что-либо обернется куда большей головной болью. Медленная компиляция лучше, чем развалившаяся совместимость. Кресты не идеальны, но, тем не менее, хороши. Лодку пытаются раскачать ньюфаги, которые сели в нее без багажа.
2. На сях можно сделать все, что можно в крестах. На асме тоже можно. Вопрос всегда в количестве альтернатив, ибо выбор между malloc/new/аллокаторами/велосипедами/еще чем-то, вообще говоря, зависит от ситуации и предпочтений погроммиста. Пока в крестах есть malloc, а в сях нет new, кресты лучше сей как универсальный язык (но не обязательно это так в какой-либо конкретной ситуации).
Набрасывайте, коллега
>nano
QtCreator сосет, если только ты не хочешь писать именно на Qt и именно гуи. Ставь IDE из шапки и не выебывайся.
>QtCreator сосет
И в чем же он сосет при написании хелловордов? Или это опять тонкая пропаганда сраного code::blocks?
Гуй можно писать и без него. Чисто для рисования формочек есть Designer.
> code::blocks
Где ты ещё кроме вима можешь свой код на весь экран развернуть? Везде постоянно что-то лишнее попадает., а тут легко и быстро можно мелкие изменение делать
>сраного code::blocks
>А чем он плох то?
Тем, что cmake без танцев не умеет? Тем что не поставляется упакованным из коробки в отличии от VS и QtCreator? А так лично мне похуй на него, бесит только анон, который его вечно пиарит.
> code::blocks
>Где ты ещё кроме вима можешь свой код на весь экран развернуть? Везде постоянно что-то лишнее попадает., а тут легко и быстро можно мелкие изменение делать
Во всех современных IDE есть фуллскрин
Это пропаганда CodeLite. Не, ну серьезно, посоны. Любой вменяемый человек понимает, что это такое дело... Очень индивидуальное. Есть тысячи мельчайших факторов, которые формируют наши предпочтения, и невозможно сделать какое-то полномасштабное сравнение и окончательно решить вопрос выбора IDE. Опять же, задачи у всех разные, для написания хэллоуворлда вполне достаточно консоли, тогда зачем человеку ебаться с установкой чего-то? Все что мы можем - сделать частичное сравнение по каким-то важным пунктам вроде обилия возможностей, скорости работы или качества отдельных фич. Оно энивей будет предвзятым, потому что все используют разные подмножества фич и имеют разные требования к их качеству. Кому-то лучше много сырых фич, кому-то - меньше, но отточенных, кто-то запускает IDE на калькуляторе, кому-то вообще важен внешний вид, или кроссплатформенность, или еще чего-то. Тут не угадаешь. Ты спрашиваешь анона - он дает тебе свое имхо, говоря за свой рабочий процесс и свои хорошие практики. Если тебя чем-то оно не устраивает - ну поставь себе на виртуалку десять IDE и сравнивай их, никто ж тебе не запрещает! Либо ты получаешь быстрый рецепт от анона, либо кулинаришь сам, третьего варианта просто не.
Clion, «presentation mode» (надо настраивать размер шрифта для него с дефолтного 24, кроме этого есть обычный фуллскрин).
В верху же название
Это все окно (alt+printscreen), работающее в presentation mode
Это древний судя по разрешению 4:3 монитор. Хотя они и сейчас продаются – для пейсания в хорошо кастомизируемой IDE (камень в сторону культяп креатора) оч кошерно.
Это окно, работающее в presentation mode. Можно его и в fullscreen развернуть
>>753850
ШINDOШS + рюсская локаль, признак пидарана-говноеда
>ШINDOШS + рюсская локаль, признак пидарана-говноеда
А вот и интеллектуальная элита подоспела
Да
Это что ещё за флажок? Уведомления? Типа вам пришло сообщение?
Я еще могу понять использование Windows+Visual Studio, которые имеют свою область применения, но рюсская локаль в комплекте с этим уже за гранью добра и зла.
Тебе чем-то мешает это? Человека заебет, ну он и поменяет. Похуй по большому счету.
Обновления плагинчиков студии.
Если у тебя ОС общего назначения, а не реального времени, то программа в ней выполняется столько, тогда и так как соизволит система.
Потому что твоя ОС шедулит программу как твою мамку, в зависимости от нагрузки (активности фонового говна, фазы луны и тд).
SHED_RR,SHED_FIFO - как добиться на линуксе гранулярности выполнения ПО хотя бы 200-300мс - софт активно гоняет по сети данные и обрабатывает поток примерно в 16 Гб/c?
Взять ОС реального времени. Хотя вообще нахуй ОС там нужна...
>>753964
Какой в этом смысл, если нужно получить время выполнения на конкретном тесте?
Хорошие олимпиадные задачи подбираются таким образом что решение с неэффективным алгоритмом заведомо не способно влезть в ограничения, а задача с эффективным имеет достаточный запас по времени и задержка (если возникнет) не повлияет на прохождение тестов.
Пробная с их сайта. Скачал посмотреть что за зверь.
Ай, простите, думал первый пост не отправился.
>>753934
Я потому второй график с cpu clock time и нарисовал, по идее количество тиков использованных на выполнение программы то должно быть одинаковым, даже если оно прерывалось.
Кэш миссы, так же зависящие от фазы луны учитываешь?
Как я уже говорил – один раз проверять смысла мало, нужно как минимум брать среднее. Ну или просто смотри на сколько алгоритм влезает по времени и памяти как антоша выше говорил.
>Ну или просто смотри на сколько алгоритм влезает по времени и памяти
В смысле, "или"? Его совет единственно верный
Потому что так устроены современные ОС и процессоры.
Ага. В рувики он тоже Майерс.
чини детектор
Да, спасибо
У каждого компилятора свой формат этого говна. Но концептуально ph присутствуют везде.
Ок. Спасибо.
ну тогда просто свопать элементы
Вопрос такой - где можно попробовать порешать реальные задачи по нашей отрасли? Предположительно работа будет с написанием ПО для всяческих контроллеров и разработка и поддержка своей SCADA-системы.
std::unordered_multimap<int, int> mm;
std::sort(mm.begin(), mm.end(), std::greater<int>());
дай ссыль на вакансию
DDE, OPC и прочая ебля с COM моделью, вот это все. А вообще подошел бы к руководителю пограмистов и спросил, что им нужно.
да, чет я запарился, мапы совсем не предназначены для ручной сортировки.
Почитая подробнее про то, как устроены бинарное дерево и хештаблица. Ты явно в этом плаваешь.
Что мертво, умереть не может.
C++ is forsaken.
Оно там нахуй не нужно. Я ключ просто для удобства поиска отдельно хранил. И сейчас решил сортировку добавить и чет тупанул. std::vector<std::tuple<>> и std::find, std::sort заглаза.
Разбираюсь немного. Но думаю почитать Кормена (все тут советуют) - норм пишет?
Норм, но эта книга не для новичков.
Начни лучше с чего-нибудь попроще. С хабра, например
https://habrahabr.ru/post/65617/
и с подобных статей.
Разного рода мапы, деревья, хеш-таблицы нельзя сортировать. Элементы в них расположены в строго определенном порядке (зависит от реализации) для ускорения их поиска, и менять этот порядок нельзя иначе потом в них нихуя не найдешь.
FAQ::Мотивация.2
test
Народ незнаю куда обратится, собственно беда в следующем, есть вложенная структура
struct DMFP_PP
{
DlinaMassivaForProverki DMFP;
PointPosition PP;
};
struct DlinaMassivaForProverki
{
int Verh, Pravo, Niz, Levo;
};
struct PointPosition
{
GLint x,y;
};
Создаю
DMFP_PP CurrentLehtKorPoForProverki;
CurrentLehtKorPoForProverki = new DMFP_PP;
CurrentLehtKorPoForProverki->DMFP = new DlinaMassivaForProverki;
CurrentLehtKorPoForProverki->PP = new PointPosition* [ 4 ];
CurrentLehtKorPoForProverki->PP[ 0 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Verh += 1 ];
CurrentLehtKorPoForProverki->PP[ 1 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Pravo += 1 ];
CurrentLehtKorPoForProverki->PP[ 2 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Niz += 1 ];
CurrentLehtKorPoForProverki->PP[ 3 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Levo += 1 ];
Естественно присваиваю значения( ноль ), но по какой-то неясной причине не присваиваются значения, синтаксис проверял всё норм. На разных форумах смотрел, но там проще или не то. Просьба пояснить, почему не присваиваются значения или не видит ничего по адресу?
Народ незнаю куда обратится, собственно беда в следующем, есть вложенная структура
struct DMFP_PP
{
DlinaMassivaForProverki DMFP;
PointPosition PP;
};
struct DlinaMassivaForProverki
{
int Verh, Pravo, Niz, Levo;
};
struct PointPosition
{
GLint x,y;
};
Создаю
DMFP_PP CurrentLehtKorPoForProverki;
CurrentLehtKorPoForProverki = new DMFP_PP;
CurrentLehtKorPoForProverki->DMFP = new DlinaMassivaForProverki;
CurrentLehtKorPoForProverki->PP = new PointPosition* [ 4 ];
CurrentLehtKorPoForProverki->PP[ 0 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Verh += 1 ];
CurrentLehtKorPoForProverki->PP[ 1 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Pravo += 1 ];
CurrentLehtKorPoForProverki->PP[ 2 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Niz += 1 ];
CurrentLehtKorPoForProverki->PP[ 3 ] = new PointPosition[ CurrentLehtKorPoForProverki->DMFP->Levo += 1 ];
Естественно присваиваю значения( ноль ), но по какой-то неясной причине не присваиваются значения, синтаксис проверял всё норм. На разных форумах смотрел, но там проще или не то. Просьба пояснить, почему не присваиваются значения или не видит ничего по адресу?
>>754561
>>754564
Блять, а хули вы хотели? Я то, наивный, думал, что умные люди здесь сидят, а нет. По делу есть, что сказать?
Лучше бы привели пример вложенных структур.
В моём случае две в одной, на основе одной из них динамический массив, причём длинна каждого разная. Проблем в общем-то нет, но меня интересует иной вариант их объявления, разименовывания.
Ясно, о чём ты, но проблема именно в том, что после объявления по этой структуре, по адресу ничего не видит.
Всё отбой, нашёл в чём проблема.
Не, не так
Нарисовал карту - раз
Затем по координатам пэкмена отрисовываешь лишь кусок 1х1 карты, то есть только он отрисовывается, а карта висит
Чёто типа
for бла бла бла
cout то, что являестя картой
}
Затем снова
массив карты[ коорлината х пэкмена ][ координата y пэкмена ] = пекмен
это постоянно обновляешь, предидущую чистишь, там пробел пишешь
точка, ввода символа. У меня так и сделано как вы сказали, но из-за низкой тактовой частоты ЦП, у меня при нажатии кнопки (т.е. движения) карта пропадает на мгновение.
Обана, ну бывает.
Насчёт пэкмена, один раз рисуешь карту, затем, там где указываешь движение, прописываешь:
При нажатии клавиши, бла бла
в массив по такому то адресу, там i и j рисуется пэкмен, в предидущую клетку рисуется пробел, ниче вроде не должно моргать
Возьми ncurses. Но ты заебешься с консолькой. Она сложнее массива символов. Лучше сразу делать с графоном.
Можно и его, конечно, но лучше что-то более высокоуровневое вроде sfml.
В зависимости от твоих предпочтений: от подчёркивания до блока.
Консоль - поток символов, у него есть текущая позиция, куда идет вывод. Если ты, например, выведешь \r, вывод пейдет на начало текущей строки, \b - сдвинется на символ влево, и т.д.
Наверно к тому, что все, кто хоть когда-то работал с консолью знают этот термин. Ныне даже в большей часте линуксов это вообще нахуй не нужно.
Заблокируй вывод в консоль. Выведи всё что надо. Разблокируй. Осталось узнать как заблокировать. Скорее всего нужна библиотека.
>это вообще нахуй не нужно
А как же крутящаяся палочка, отображающая прогресс? Или меняющиеся процентики.
Символ напечатался, а потом поменялся. начит курсор передвинулся и переписал его. Не тупи.
Лан я понел, ты траль.
Ну значит, будем плясать без него.
Ну ты делаешь, например, архиватор. Пока файл архивируется, в консоль выводишь прогресс. Но чтобы не выводить новую строчку каждый раз, затираешь старые символы, и выводишь поверх новые.
В хуй мне потолсти, лалка
код функции
void File (fstream fin, fstream fout)
{
fin.seekg (0, fin.end);
int length = fin.tellg();
fin.seekg (0, fin.beg);
char c;
for (int i =1 ;i<length;i++)
{
fin.seekg (-i-1, fin.end);
fin.get(c);
fout.put(c);
}
}
gist.github, pastebin, тысячи их, пидр
Не умеешь читать доку к либе - страдай.
А Дэвис-хуесос ?
Начни с питона
Локальная консольна ямиджборда! Единственная в своём роде. А унутре у ней неонка!
Даун, мапы уже отсортированы.
Иди на хуй и лабу свою забери.
> 2016 год
> Майкрософт все еще не в состоянии написать деинталлятор, который бы не ломал систему
> Заводим проект на гитхабе
https://github.com/Microsoft/VisualStudioUninstaller
Эта хуета когда-нибудь закончится?
Сука лол. Деинсталятор с гитхаба тоже не работает.
https://www.youtube.com/watch?v=tmPG5WfO14A
GetStdHandle..
Почему в дочернем классе можно переопределить функцию родительского класса, при этом не указывая virtual в род. классе? Чем эти 2 случая отличаются?
Ты ее просто перекрываешь. Полиморфизм не будет работать.
Процесс вызова функции состоит из нескольких этапов. Например, ты пишешь f (42); Тогда последовательно произвойдут:
1. Name lookup (компилятор отбирает из всех имен f, встретившихся в текущей единице трансляции, только те, которые видимы в данной точке программы)
2. Разрешение перегрузки (компилятор отбирает из всех функций, отобранных на предыдущем этапе, ту, у которой типы параметров лучше всего соответствуют типам аргументов - f (int) в твоем случае выберется вместо f (char), даже если видимы обе)
3. Разрешение доступа (компилятор проверяет, что ты имеешь право вызвать выбранный метод - например, что он не является private, если ты вызываешь его не из друзей/других методов)
4. Разрешение виртуальности (уже в рантайме для виртуальной функции выберется, вообще говоря, не она сама, а аналогичная из наиболее глубокого потомка)
Соответственно, случаи отличаются как пункты 1 и 4 - в первом случае это будет вообще другая функция, даже до перегрузки дело не дойдет. Во втором случае, наоборот, она заменится в самый последний момент, для заменяющей не будет ни проверки доступности, ни поиска лучшего соответствия, все они будут проведены для заменяемой - виртуальной в родителе.
Посоны, я полный деб и не могу понять что значит символ ^ допустим в контексте
>String^ string;
Не гуглится нихуя
Никогда не думал, что буду помоглать гуглить деб-пакету, но вот держи:
http://stackoverflow.com/questions/6616599/does-the-symbol-replace-cs-ref-in-parameter-passing-in-c-cli-code
До чего техника дошла.
Если функция обычная, не помеченная как виртуальная, то идет просто вызов обычной функции, в которую передастся this в качестве неявного параметра. Когда ты вызываешь мембер-функцию по указателю на базовый класс, то поиск функции происходит в базовом классе, а когда по указателю на наследник, то поиск происходит сначала в классе-наследнике.
Когда функция виртуальная, то все происходит сложнее. Тогда для этого класса и всех его наследников заводится таблица виртуальных функций, в каждой из которых сопоставляется имя функции её фактическому адресу. Например, у тебя в базовом классе есть виртуальный метод foo, который переопределен в наследнике. Тогда в таблице виртуальных функций базового класса будет строчка вида foo -> <адрес Base::foo>, а в таблице вирт. функций наследника строчка вида foo -> <адрес Derived::foo>. И в каждом созданном объекте хранится указатель на соответствующую таблицу вирт. функций. Вызов виртуальной функции преобразуется компилятором в цепочку действий:
1. Пойти в таблицу вирт. функций по указателю внутри объекта
2. Найти там соответствующую функцию
3. Вызвать её
Ну вот, теперь что происходит в случае, когда функция перекрывается и когда она виртуальная.
Первый случай: есть базовый класс Base, у него есть невиртуальная функция foo, от него наследуется класс Derived, который функцию foo перекрывает. Теперь такой код:
Base[звездочка] b = new Derived();
b->foo();
Здесь компилятор разрешает вызов мембер-функции foo. Он видит, что объект, у которого она вызывается, является экземплятором класса Base, про то, какой фактически объект находится по этому указателю, компилятор не может знать, поэтому он просто вызывает функцию Base::foo.
Теперь представим, что функция foo объявлена с модификатором virtual.
Тогда вызов функции b->foo() компилятором будет преобразован в поход в таблицу вирт. функций, в поиск там соответствующей функции, взятие её адреса и вызов. По указателю b фактически лежит объект класса Derived, у которого в таблице вирт. функций есть строчка foo -> <адрес_Derived::foo>, будет взят адрес Derived::foo, после чего она и будет вызвана.
Стало понятнее?
Если функция обычная, не помеченная как виртуальная, то идет просто вызов обычной функции, в которую передастся this в качестве неявного параметра. Когда ты вызываешь мембер-функцию по указателю на базовый класс, то поиск функции происходит в базовом классе, а когда по указателю на наследник, то поиск происходит сначала в классе-наследнике.
Когда функция виртуальная, то все происходит сложнее. Тогда для этого класса и всех его наследников заводится таблица виртуальных функций, в каждой из которых сопоставляется имя функции её фактическому адресу. Например, у тебя в базовом классе есть виртуальный метод foo, который переопределен в наследнике. Тогда в таблице виртуальных функций базового класса будет строчка вида foo -> <адрес Base::foo>, а в таблице вирт. функций наследника строчка вида foo -> <адрес Derived::foo>. И в каждом созданном объекте хранится указатель на соответствующую таблицу вирт. функций. Вызов виртуальной функции преобразуется компилятором в цепочку действий:
1. Пойти в таблицу вирт. функций по указателю внутри объекта
2. Найти там соответствующую функцию
3. Вызвать её
Ну вот, теперь что происходит в случае, когда функция перекрывается и когда она виртуальная.
Первый случай: есть базовый класс Base, у него есть невиртуальная функция foo, от него наследуется класс Derived, который функцию foo перекрывает. Теперь такой код:
Base[звездочка] b = new Derived();
b->foo();
Здесь компилятор разрешает вызов мембер-функции foo. Он видит, что объект, у которого она вызывается, является экземплятором класса Base, про то, какой фактически объект находится по этому указателю, компилятор не может знать, поэтому он просто вызывает функцию Base::foo.
Теперь представим, что функция foo объявлена с модификатором virtual.
Тогда вызов функции b->foo() компилятором будет преобразован в поход в таблицу вирт. функций, в поиск там соответствующей функции, взятие её адреса и вызов. По указателю b фактически лежит объект класса Derived, у которого в таблице вирт. функций есть строчка foo -> <адрес_Derived::foo>, будет взят адрес Derived::foo, после чего она и будет вызвана.
Стало понятнее?
Чем code::blocks хуже clion или codelite, почему его нет в шапке?
На чем трушнее разрабатывать гуй в 2016?
Juce/wxvidgets/gtk/qt и почему? Какие плюсы-минусы?
С похода к духтору. Он тебе поможет социализироваться, если ещё не всё так запущено, конечно.
Какие подводные камни?
На книжки я кладу хуй, как только дохожу до непонятного места. С онлайн-курсами то же самое.
boost::wakaba. Не благодари
Да, конечно иди. После подобных курсов меня сразу взяли на должность мидл-девелопера, хотя я вообще языка практически не знал до них. Стоит своих денег!
Ты поехавший дядя? Открой хоть раз eclipse cdt, это - самая сильная IDE в code assistant на данный момент.
Про cdt не было речи
Что тебе мешает положить хуй когда дойдешь до непонятного места на оффлайн курсах?
В шапке в основных какое-то говно, я это имею ввиду.
1. Деньги уплочены.
2. Чисто психологически не так легко соскочить, когда занимаешься с другими людьми.
3. Препод должен популярно объяснять непонятные моменты.
>Эклипс - жуткая и тормозящая параша.
Ты ебу дал? Почему у меня не тормозит? Ни с hdd, ни тем более с ssd.
как все это считать в матрицу смежности?
Список смежности проще на крестах. Матрицу на си или паскале строить будешь.
окей. это не столь важно, список или матрицу. главное реализовать поиск.
считать строку и определить что это за класс и откуда наследует (если наследует вообще).
текстовый файл с объявлением класса, типа:
class Parent {};
class Child: virtual public Parent {};
Все классы в разнабой? Родитель может после ребёнка быть? Тогда нёжен мап. Ключ имя класс, а значение это множество унаследованных от него классов. Читаешь файл по строкам. Если встретил класс базовый, то добавляешь в мап и множество детей пустое. Если встретил унаследованный класс, то класс ребёнка добавляешь в множество детей класс родителя, и создаешь пустой класс ребёнка если он ещё не создан. ЗА 1 проход должен справиться. Можно не мапом, а вектром. Так сложнее, но в конце в список смежностей не придётся конвертировать.
Какие ограничения? Могут ли в классе быть объявления методов, функций и т.п., или это форвард-декларации без тела класса? Могут ли быть комментарии в этом файле? Однострочные, многострочные? Может ли быть что-то кроме классов в файле? Строки, например?
В общем случае тебе надо брать с++ парсер и вытягивать оттуда классы, потому что ручками распарсить это будет очень тажело.
Если же условия облегченные, т.е. просто декларации классов, без тела, комментариев и других элементов языка нет, онли классы и зависимости, тогда напиши легкий парсер, можешь сам ручками, можешь использовать bison++ генератор парсеров, вообще ручками тут будет достаточно просто это сделать.
Ну и потом сохраняешь это как-нибудь. Если нужна матрица смежности, ну так создай массив массивов булов, лучше всего юзай std::array, и заполняй.
Двачую, в общем случае без полноценной компиляции до конца хуй распарсишь. Например, можно без проблем нахуярить такой код, чтобы родители были разные в зависимости от содержимого какого-то из строчных литералов, и все развалится от малейшего дуновения нестандартного парсера.
>текстовый файл с объявлением класса
>строчных литералов
Он же вроде объяснил что там только такие строки как в примере.
n = |n|
можешь сам написать
int str(int num)
{
int res = 0;
for(size_t i = 0; i!=num; ++i)
{
res += num;
}
return res;
}
Нашёл какой-то pow, cделал так: double module = sqrt(pow(compare,2.0));
Оно показывает 0 в любом случае.
>>756399
Спасибо, сейчас попробую.
>>756222
Спасибо за помощь, но не могу вытащить из строки "нужное". Есть ли вариант с помощью регулярных выражений получить из строки:
class Child1: virtual public Parent, virtual public Child0 {};
строку:
Child1 Parent Child 0
Каким образом это реализовать?
Ты не смог распрасить строки в примере или в твоём текстовом файле тебе что-то мешает?
Я не смог понять КАК это сделать. Мне ничего не мешает, есть текстовик, там все эти наследования, как я и говорил, их может и не быть, а может быть 2-3, к примеру. Суть не в этом.
Мне надо получить то, что я написал выше, с учетом того, что если будет больше наследований, то соответственно больше имен
Списсок смежностей легко делать на динамических массивах. И он лучше матрицы т.к. занимает меньше памяти.
на сях не вектора самому функции инсерт и делите в список писать будешь и с указателями ебаться
А, лол, std::vector же, действительно. Сорь
Ну на плюсах ты тоже нормально не сделаешь. Фрагментация заебет. Но для laba_graph.cpp норм.
Каждый вложенный массив может появится в новом месте. Чтобы это избежать костыль по превращению двумерного массива в одномерный нужен. И не эффективно т.к. лучше фрагментация памяти чем её перерасход.
>костыль по превращению двумерного массива в одномерный нужен
Это новое название memory pool?
>Костыль, сложно, нечитаемо
ну ок.
int arr = new int[n];
arr[0] = new int[nm];
for(size_t i = 1; i!=n; ++i)
arr = arr[i - 1] + m;
ну и обращайся к массиву arr[j].
>очень неэффективно по памяти
поясни
int arr = new int [n];
arr[0] = new int[n m];
for(size_t i = 1; i!=n; ++i)
arr = arr[i - 1] + m;
int arr = new int [n];
arr[0] = new int[n m];
for(size_t i = 1; i!=n; ++i)
arr = arr[i - 1] + m;
как ты и хотел. Без
>Костыль, сложно, нечитаемо
А, вообще, тебе любой пояснит, почему так делать лучше.
Можешь регуляркой, что-то вроде http://pastebin.com/L3ch8ze5
Но я не уверен, можно ли сделать произвольное количество матчинг-групп, как в твоем случае, в онлайн-регэкс чеккере у меня захватывается только имя последнего класса.
А можешь ручками распарсить, просто читаешь последовательно слово за словом из потока, и проверяешь прочитанные слова, типа того:
std::string base_class_name;
std::vector<std::string> derives;
std::string word;
std::cin >> word;
if(word != "class") exit();
std::cin >> base_class_name;
if(base_class_name.rbegin() == ':') base_class_name.erase(base_class_name.rbegin());
if(base_class_name.rbegin() == ';') exit();
while(true) {
std::cin >> word;
if(word == "virtual") std::cin >> word;
if(word == "public" || word == "private" || word == "protected) std::cin >> word;
derives.push_back(word);
if(word.rbegin() == ';' || word.rbegin() == ',') derives.back().erase(derives.back().rbegin());
if(*word.rbegin() == ';') break;
}
Это пример и он топорный, тут не разобраны случаи с пробелами перед и после запятых или точки с запятой, тебе надо над этим подумать.
Последний вариант -- погугли, что такое лексеры, генераторы парсеров и парсер-комбинаторы, на хабре есть статьи и в других местах тоже, можешь использовать их, они сложнее в освоении, нужно иметь знания в области формальных языков и грамматик а также требуют времени на освоение, но они позволяют решать эти задачи более элегантно и просто.
Можешь регуляркой, что-то вроде http://pastebin.com/L3ch8ze5
Но я не уверен, можно ли сделать произвольное количество матчинг-групп, как в твоем случае, в онлайн-регэкс чеккере у меня захватывается только имя последнего класса.
А можешь ручками распарсить, просто читаешь последовательно слово за словом из потока, и проверяешь прочитанные слова, типа того:
std::string base_class_name;
std::vector<std::string> derives;
std::string word;
std::cin >> word;
if(word != "class") exit();
std::cin >> base_class_name;
if(base_class_name.rbegin() == ':') base_class_name.erase(base_class_name.rbegin());
if(base_class_name.rbegin() == ';') exit();
while(true) {
std::cin >> word;
if(word == "virtual") std::cin >> word;
if(word == "public" || word == "private" || word == "protected) std::cin >> word;
derives.push_back(word);
if(word.rbegin() == ';' || word.rbegin() == ',') derives.back().erase(derives.back().rbegin());
if(*word.rbegin() == ';') break;
}
Это пример и он топорный, тут не разобраны случаи с пробелами перед и после запятых или точки с запятой, тебе надо над этим подумать.
Последний вариант -- погугли, что такое лексеры, генераторы парсеров и парсер-комбинаторы, на хабре есть статьи и в других местах тоже, можешь использовать их, они сложнее в освоении, нужно иметь знания в области формальных языков и грамматик а также требуют времени на освоение, но они позволяют решать эти задачи более элегантно и просто.
наши звездочки пожрал долгоносик, милорд
Надеюсь, понятно, где они должны стоять везде, где разыменовывается итератор rbegin() и сравнивается с символом
>Надеюсь, понятно, где они должны стоять везде, где разыменовывается итератор rbegin() и сравнивается с символом
Охуел, бля? Еще мы тут будем вчитываться в твой высер. Заливай на ideon свое говно.
Иди нахуй, я ответил человеку. Если ему это нужно -- разберется или хотя бы вежливо попросить залить куда-нибудь.
Если твои глазки болят и вытекают глядя на мое говно, можешь идти, сесть в уголочек и тихонечко их себе выколоть.
3.9.1/8 говорит, что long double имеет достаточную точность, чтобы хранить любое значение из double.
Тебе не кажется, анон, что тут какая-то нестыковка?
Я имею в виду как раз, что ее нет среди promotions. Получается, безопасность не гарантируется, но 3.9.1/8 утверждает обратное. Если она всегда безопасная, то зачем ее отнесли к conversions, разве основная суть promotions не отделение гарантированно безопасных преобразований?
В 8.5.4/7 вроде указаны все сужающие преобразования, видимо, все остальные являются нормальными. Хотя действительно странно, что напрямую нигде не сказано про double -> long double.
Потому что switch в c и c++ работает только с перечисляемыми типами. string, естественно, к ним не относится.
http://ideone.com/iGGnvN
Как сделать так, чтобы если я ввёл unit не из списка (m, cm, in, ft), то мне писалось бы что он неверный и предлагалось заново ввести его, а не закрывалась программа?
На 18-22 строках у меня бам break; стоит.
Cпасибо, т.е. брейк просто прерывает программу, а продолжить прерывает текущую функцию, и делает откат, как-то так?
У тебя дело происходит в цикле while. break выводит из цикла, continue отправляет на следующую итерацию.
continue относится только к циклам, типа while / for? У меня он же в if находится. Понятно, в книге, просто, про него не было написано.
break/continue могут быть в любом цикле, независимо от положения. Они будут относиться к наиболее вложенному, если отсутствует метка.
А у вас нету чата какого-нибудь?
http://pastebin.com/YJDR9eTL
Вот сам код. При попытке его скомпилить(это кусок библиотеки) все получается и никаких проблем нет. Но вот при подключении этой самой библиотеки к тестовому проекту, последний выдает ошибку линковщика, жалуясь на DelegateProc. К слову если убрать присвоение
DelegateProc = _DelegateProc;
То код вполне себе компилится. Казалось бы дело именно в нем, но как, черт возьми, тогда его правильно сделать?
Ты имеешь ввиду его нужно было в самом начале еще присваивать? То есть указать сначала тип, потом этот объект, и потом какую-нибудь начальную ф-цию. Но как указать тип?
???? Win32WindowWrapper::DelegateProc = DefWindowProc;
Что писать в начале?
> Language lawyers.
Собственно, всё "знание" цепепе — это быть language lawyer. ООПе оно в любом языке ООПе.
не используй тут std_lib_facilities.h внутри нечто избыточное для "драститя,мирок"
пиши вместо
#include <iostream>
using namespace std;
+ функция int должна возвращать int, т.е. перед "}" вкрячь
return (2016); // 2016 - ничего не означающее
или вообще просто замени "int main~" на "void main~"
Так оно должно запуститься, но результата ты, скорее всего не заметишьпрограмка быстро выполнится и кокошечко сразу цакроица, так что перед return~ пропиши, к примеру,
int xui; // объявляешь переменную хui, типа int
cin >> xui; // тут программка будет ждать ввода хуя, - ничего не будет происходить, пока не введешь число - полюбуешься на свой Hell~
>+ функция int должна возвращать int, т.е. перед "}" вкрячь
> или вообще просто замени "int main~" на "void main~"
Один совет охуительней другого.
>getchar()
Не стандартные средства языка.
>system("pause")
А за такое вообще нужно брать и убивать.
Лол, блядь! Тогда что есть стандартные средства?
Ну и что? cstdio - часть стандартной библиотеки c++. В pure c такого хедера вообще нет.
Хотя лучше использовать std::cin.ignore(), да
Все с тобой понятно.
У тебя неправильная ide и ось
*your
У меня есть два вопроса:
1) Есть Window. На нём есть пара элементов. Как можно поменять параметры одного элемента из кода другого? Обычно это делается сигналами/слотами, но что делать, если я хочу, например, изменить значения на сразу двух лейблах по нажатию кнопки? Мне нужно биндить слот на кнопке сразу к двум сигналам на лейблах?
2) Есть кнопка. Когда нажимаю кнопку, начинается в цикле выполнение некоторого кода. Цикл распараллеленн с помощью OpenMP. После завершения нужно вывести результат в лейбл на форме.
Как сделать так, чтобы во время этих вычислений, само приложение не подвисало? Такое возможно с OpenMP вообще?
Ну то-есть, я хочу, чтобы приложение просто висело и не крашилось от того, что пользователь по нему кликнет пару раз наугад куда-нибудь.
~67$
Не учи. Похуй как-то вообще. Или тебя по учебе заставляют? Тогда прогревай анус лол.
как обновить путь автоматом к базе сразу ко всему?
1. Да, либо отдельный слот создавать, чтобы он выводил сразу на обе подписи.
2. QtConcurrent может такое, напихаешь задач и запустишь их. Создашь QEventLoop и стартанешь его, после выполнения всех задач скажешь QEventLoop'у идти нахуй со своими ивентами.
Есть программа, где на исходном изображении мышкой выделяю некоторый контур и этот контур, как новое изображение загружается в новое окно.
Сделал так:
private: System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if (isDrag) {
isDrag = false;
pictureBox1->Image = bmp1;
Pen^ p = gcnew Pen(Color::White);
Point endPoint = Point(e->X, e->Y);
int width = endPoint.X - startPoint.X;
int height = endPoint.Y - startPoint.Y;
theRectangle = Rectangle(startPoint.X, startPoint.Y, width, height);
g->DrawRectangle(p, theRectangle);
endP = endPoint;
}
}
private: System::Void button11_Click_1(System::Object^ sender, System::EventArgs^ e) {
int W =bmp1->Width, H = bmp1->Height;
bmpF = gcnew Bitmap(W, H);
for (int i = startPoint.X; i <= endP.X; i++)
{
for (int j = startPoint.Y; j <= endP.Y; j++)
bmpF->SetPixel(i-startPoint.X, j-startPoint.Y, bmp1->GetPixel(i, j));
}
pictureBox16->Image = bmpF;
}
Как сделать, что бы этот контур можно было поворачивать? Что-то никак не могу разобраться.
Есть программа, где на исходном изображении мышкой выделяю некоторый контур и этот контур, как новое изображение загружается в новое окно.
Сделал так:
private: System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if (isDrag) {
isDrag = false;
pictureBox1->Image = bmp1;
Pen^ p = gcnew Pen(Color::White);
Point endPoint = Point(e->X, e->Y);
int width = endPoint.X - startPoint.X;
int height = endPoint.Y - startPoint.Y;
theRectangle = Rectangle(startPoint.X, startPoint.Y, width, height);
g->DrawRectangle(p, theRectangle);
endP = endPoint;
}
}
private: System::Void button11_Click_1(System::Object^ sender, System::EventArgs^ e) {
int W =bmp1->Width, H = bmp1->Height;
bmpF = gcnew Bitmap(W, H);
for (int i = startPoint.X; i <= endP.X; i++)
{
for (int j = startPoint.Y; j <= endP.Y; j++)
bmpF->SetPixel(i-startPoint.X, j-startPoint.Y, bmp1->GetPixel(i, j));
}
pictureBox16->Image = bmpF;
}
Как сделать, что бы этот контур можно было поворачивать? Что-то никак не могу разобраться.
Для сношения вашей матушки, уважаемый.
Чем писать хеллоуворды на линуксе(убунту16.04)?
Это копия, сохраненная 16 июня 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.