Этого треда уже нет.
Это копия, сохраненная 19 ноября 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
554 Кб, 399x587
Оффициальный™ традиционный® C++ тред #9 #559303 В конец треда | Веб
"Поделка Бьерна, истребись дотла!
Пусть на тебе и драйвер не напишут!
Ты свой же корень в скверне превзошла!" -

Стенал Никлаус, в горести не слыша,
Как те, кто Страуструпа прославлял,
Зловеще за его спиною дышат.

Что Скоттом звался, с холодом сказал:
"Неужто ты, глупец, не слышишь лая?
От Персефоны не спасет тебя Pascal -

Она такая лютая и злая,
Что хейтерами вечно голодна,
За каждым вслед еще сильней алкая.

Коль не умолкнешь - явится она."


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://ru.cppreference.com/w/
Блог Герба Саттера (на ангельском) - http://herbsutter.com/
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru/
Видео с CppCon (на ангельском) - http://www.youtube.com/user/CppCon/videos

Куда писать код:

Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать, следуя инструкциям с этой страницы: https://www.visualstudio.com/ru-ru/products/free-developer-offers-vs.aspx. Чтобы начать писать код, нужно запустить 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

Старший брат: >>518562 (OP)
Предыдущий: >>554944 (OP)
#3 #559310

>https://www.visualstudio.com/ru-ru/products/free-developer-offers-vs.aspx


>ru-ru



ОП-хуй, зачем ссылку на русскую версию даёшь? IDE должна быть на английском языке. Правильно
https://www.visualstudio.com/en-us/products/free-developer-offers-vs.aspx
#4 #559311
>>559310
Спорное утверждение, должен быть тот язык, на котором удобнее работать, имхо. В любом случае, ты можешь при установке выбрать язык.
#5 #559312
>>559303 (OP)
Шекспир сука, МОАР
#6 #559313
>>559311
Не можешь. В том-то и дело, что я установил Community 2015, а язык только <язык ШindoШs>, английский не ставится. Языковой патч накатывать в духе Микрософт в нескольких гигов желания не было, я снёс и поставил заново, предварительно убедившись в правильности ссылки.
#7 #559314
>>559313
Ну ладно. Пусть аноны в этом треде пока отписываются за и против, а ближе к концу решим, как лучше.
#8 #559319
http://shtonda.blogspot.ru/2014/10/effective-modern-cpp-scott-meyers.html
Вы только посмотрите на этого гондона. В четвертый, сука, в четвертый раз откладывает релиз книги на месяц. В июне это был август, в августе - сентябрь... Отвратительный усатый дегенерат, дерьмо, пидор.
#9 #559463
>>559319
300 страничек, уже бы выучил ангельский и прочитал
#10 #559469
>>559445
Ты должен читать не все строки во внутреннюю структуру, а обрабатывать файлы построчно, либо посимвольно(буферизация в помощь) - это поможет избежать лишнего копирования символов туда-сюда.
У тебя задача не требует рандомного доступа к данным, можно обработать потоки последовательно. Твоя ошибка - парсить все строки во внутреннюю структуру.
Чтобы выполнить твоё задание это сделать оч. легко на циклах и на >>(для char), .peek(), .ignore() - конечный автомат там у тебя типичный будет, мысли в терминах автомата. Иногда приходится просматривать на символ вперед, не доставая его - для этого нужны .peek(), .ignore(). ignore еще полезен чтобы пропускать все символы, пока не встретишь определенный.
В твоём случае алгоритм такой:
Цикл по символам файла
Читаешь параллельно 2 файла, сравниваешь символы, пока не встретишь ','
Если символы не равны на каком-то этапе - пропускаешь строчку в обоих файлах с помощью s.ignore( numeric_limits<streamsize>::max(), '\n');s.ignore() либо самописным циклом, переходишь к началу цикла.
Если символы оказались равны - пишешь в выходной файл сначала из первого входного(читаешь до '\n', пропускаешь '\n'), потом из второго аналогично - всё посимвольно.
Проблемы могут быть с виндовским "\r\n" - чтобы не копировать '\r' в выходной файл сделай дополнительную проверку.
#11 #559484
>>559319
Да ты ебнутый, я ее за первую неделю прочитал, неужели у тебя настолько плохо с ангельским? Алсо книга так себе, многие моменты не раскрывает или раскрывает плохо.
#12 #559486
>>559319
Без знания ангельского на уровне свободного чтения со словарём и способности его подтянуть - вон из профессии!
#13 #559538
>>559469

>Проблемы могут быть с виндовским "\r\n" - чтобы не копировать '\r' в выходной файл сделай дополнительную проверку.



Лучше один раз включить std::ios_base::binary при открытии файла filename:

>fs.open(filename, std::ios_base::binary);


>//...


>fs.close();

#14 #559549
>>559538
Для выходного файла, разумеется. Для входного бинарный режим не открывать.

>std::ifstream ifs;


>ifs.open(file_in);


>//...


>ifs.close();



>std::ofstream ofs;


>ofs.open(file_out, std::ios_base::binary);


>//...


>ofs.close();

#15 #559551
>>559486

> свободное чтение


> со словарем

#16 #559586
>>559469
зачем посимвольно, когда можно читать всю строку а потом вырезать подстроки с помощью find и substr?
#17 #559587
>>559586
А find и substr как работает?
#18 #559590
>>559587

string a = "1,A";

string _1 = a.substr(0, a.find(",")); // вырежет единицу. Причем substr это слайс, то есть копирования внутреннего массива не будет.
112 Кб, 1198x511
#19 #559599
Как на этих ваших кутях сделать всплывающие виджеты? Вроде всплывающих ответов на двоще.
В какую хотя бы сторону копать?
#20 #559600
>>559599
Или, может быть, можно придумать какую-нибудь невсплывающую замену?
#21 #559675
>>559586
implying посимвольно будет быстрее, т.к. не копируем символы из строк в поток, из потока в строки(т.е. используем строку в качестве дополнительного буфера), а напрямую работая с потоками.
#22 #559689
>>559590
Не, я не об этом. find внутри себя имеет цикл прохода по строке. Если тебе нужен максимум скорости, проще написать такой внешний цикл и читать из потока и писать сразу в поток посимвольно. Собственно, на С без встроенных строк это даже короче всего будет.
#23 #559721
>>559689
у ifstream есть .ignore(size_t, char) - который пропускает все символы до заданного(например нам нужно '\n'). Свой цикл элементарен.
Сравнивать символы пока не встретишь ',' - тоже проще пареной репы.
#24 #559736
>>559599
Обычный же виджет, QFrame например. Перехватываешь маусовер сигнал, отрисовываешь. Там с настройками виджета играешься чтобы получить нужное поведение, например флаги окна выставляешь (Qt::WindowFlags).
#25 #559739
>>559689
Сразу видно пердолика. Очнись, сейчас 2015 год. Компилятор сам сгенерит оптимизированный цикл.
#26 #559746
>>559739
А ты проверь.
#27 #559749
>>559739

>Сразу видно пердолика.


>C++ тред


Oh, you

Алсо, тут задачка - перловый однострочник, а они уже второй тред ебутся.
#28 #559752
>>559749
Ебется только вопрошающий, я ему даже алгоритм дал. Запиливать нахаляву даже такой простой код никто не хочет.
#29 #559754
>>559749
Кстати, мне кажется, что если решить задачу на regexах по строкам, полностью считанным из файла - будет нихуевое замедление по сравнению с посимвольным решением.
#30 #559755
>>559754
Тебе кажется. Читая посимвольно, скорость I/O ты не увеличишь.
#31 #559756
>>559754
regexp компилируется в конечный автомат, примерно так же выглядит и посимвольное решение. Может и будет немного медленнее, но задача IO-bound, как выше заметили.
#32 #559758
>>559755
>>559756
Я думаю выигрыш будет на чтении строки и записывании её в поток в случае больших файлов. В посимвольном решении лишних буферов нет, только непосредственный буфер потоков.
#33 #559759
>>559758
поправка - implying мы читаем из файлов в строки целиком. В случае построчной обработки тормоза нивелируются чуть ли не до нуля - если строки не длинные.
#34 #559760
>>559758
Пока ты запихнешь байт в жесткий диск, процессор успеет попить кофе, проиграть тебе порно, поспать, и обработать, наконец, новую строку.
#35 #559761
>>559758
Дедушка Кнут тебе бы уже переебал в обучающих целях своим premature optimization.
#36 #559762
>>559758
Ты идиот. Из файловой системы всегда читай по 4096 байт.
Потому что тогда будет меньше перепозиционирований считывающей головки и как следствие - выше скорость.
Для SSD - тоже в опеределенной степени относится.
#37 #559765
>>559760
Ну это отсылка к тому, что это незначимо при современных мощностях. Всегда можно увеличить размер файла до такой степени, что прога будет выполняться пару часов, например.
>>559762
Сам такой. Как regex будешь применять если есть в файлах строки длиннее 4096 байт и их будет много, к примеру?
#38 #559767
>>559761
Тут интерес чисто спортивный, а не прикладной.
#39 #559768
>>559765
Он имеет в виду считывать порциями, максимально приближенными к кратности 4096. Идеально считывать 4096, 8192, ну ты понел, если ты считываешь 100к сразу, то тоже годно. А хуево, если ты считал 1 байт, потом еще 1 байт, и так далее, тогда скорость каждого считывания будет почти такая же, как у считывания сразу 4096 байтов, ибо данные с диска выгружаются блоками.
#40 #559769
>>559765
считал буфер в 4096, в буфере уже в памяти нашел окончание строки - скопировал строку.

перекачивание байтиков по шине SATA гораздо более затратная вещь, чем перекачивание байтиков по шине между процом и оперативной памятью
#41 #559770
>>559767
Тогда пили бенчмарки, а не кукарекай с проперженного дивана.
#42 #559771
>>559770
К тебе тоже относится.
#43 #559772
>>559771
Нет, сынок, ко мне это не относится.
#44 #559773
>>559768

> скорость каждого считывания будет почти такая же, как у считывания сразу 4096 байтов


Зависит от реализации окружения языка. Если считывать при помощи winapi ReadFile - то скорость будет значительно меньше при побайтном считывании, чем при считывании блоком. Проверено на практике
#45 #559774
>>559768
Так посимвольно я имел в виду считывать со встроенным в ifstream буфером, который как раз оптимальный 4к байт. Накладные расходы появляются, когда таскаем дату из буфера в буфер, не делая ничего полезного.
>>559772
Пили бенчмарки, папаня. Ты ж мужик, давай, покажи сынку!
#46 #559776
>>559774
В защиту моей точки зрения выступают memory-mapped file - там как раз идея избавления от user-space буферов и операций копирования. Выигрыш нехилый получается(см. stackoverflow)
#47 #559777
>>559314
Сделой джве ссылки, ептубля.
#48 #559779
>>559774
Я уже не в том возрасте, чтобы с горящими глазами онанировать на бессмысленные оптимизации.
#49 #559780
>>559779
А где ты увидел горящие глаза?
Зато ты в том возрасте, чтобы сидеть на АИБ и троллить ньюфагов, наживая прирост ЧСВ.
sage #50 #559781
>>559773
Не долбись в глаза же. Считываешь 1 байт = считываешь 1 блок, большую часть времени занимает физический доступ. Т.е. замедление будет почти в 4096 раз.
#51 #559783
>>559776

>избавления от user-space буферов и операций копирования


О да! mmap файлов придумывался именно для того, чтобы байтики лишний раз по оперативе не двигать, лол.
#52 #559784
>>559773
Это из-за оверхеда на сискол. Ядро один хуй меньше блока за раз не читает с диска.
#53 #559789
>>559784
Вопрос в том, определит ли ОС\окружение языка, что считывание происходит последовательно и можно скармливать сисколу данные из буфера и не обращаться к железу каждый раз
#54 #559812
>>559758 >>559760 >>559761 >>559762
Вы все ебланы. fstream по умолчанию имеет буфер, если его не отключить. Так что именно как раз счёт буфера он посимвольно может отработать свою задачу не так уж и медленно. Но не под вендой. А если создаст массив чаров и задаст буфер 4096, это будет самое быстрое решение.

мимо-даун из прошлого треда, вопрошавший про умные указатели
#55 #559874
Крестопетухи должны страдать.
#56 #559892
>>559874
А кто не должен страдать?
#57 #559896
>>559812

>А если создаст массив чаров и задаст буфер 4096, это будет самое быстрое решение.



У него алгоритм посимвольной обработки, лолка. В чём отличие - проходить по встроенному буферу или по твоему собственному? Читать/писать примитивные типы с >> удобнее через fstream, чем через свой велосипед, т.к. не надо заморачиваться насчёт пересечения каким-либо полем/строкой границ буфера - хотя в данном примере это несущественно. А с regex проблемка в том, что строки могут проходить через границу твоих буферов, а на ходу не подкачаешь её. Regex выполняется по заданной строке, встречая обрыв строки(\n еще небыло, а строка оборвалась краем буфера) - конечный автомат завершает работу.
>>559874
Мимо проходи, если даже не понимаешь о чём речь.
sage #58 #559897
>>559892
ФП-элита
16 Кб, 225x321
sage #59 #559899
#60 #559919
>>559896

>В чём отличие - проходить по встроенному буферу или по твоему собственному?


Для чара, сайзоф которого == 1, в задании размера собственного буфера. Попробуй и увидишь, что скорость реально поднимется, когда увеличишь размер буфера. Дефолтный буфер маленький.

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

Для массивов бинарных данных вообще отрубить буферизацию и писать напрямую .write(reinterpre_cast<const char*>(arr), sizeof_arr) , если они порядка килобайта.

Каждый третий тред, каждый, стабильно. Одно и то же пишу.
#61 #559954
Тред полон преждевременных эякуляторов оптимизаторов.
Один чары в вектор сует, другой посимвольно читает, третий сисколы высчитывает. Вы бы хоть почитали как всё работает, прежде чем кукарекать.

Дал всем за щеку.
#62 #559969
Прошу доставить полный листинг кода такого примера программы.

double sqrt ( double x ); //Функция корня для чисел с плавающей точкой
int sqrt ( int x ); //Функция корня для целых чисел
...
sqrt(1.5);//В этом случае вызовется функция чисел с плавающей точкой
sqrt(7);//А в этом уже для целых чисел
#63 #559977
>>559954
А вот поясните, кстати. Если идет речь о непрерывности массива в памяти, то, например, в случае чаров гарантируется, что они займут именно соседние байты? Или только, что arr [i+1] будет указывать на следующий элемент, но при этом сами элементы могут быть, например, выровнены по одному в слове? Другими словами, есть ли гарантия, что между &ch и &ch+1 нет пустого пространства?
#64 #559979
>>559969
Что ты подразумеваешь под листингом? За ассемблерный листинг спрашивай свой компилятор, телепаты у нас в отпуске, а без них я не знаю, как у тебя корни реализованы. Или ты хочешь как раз реализацию корней увидеть? Тогда тебе сюда: http://en.cppreference.com/w/cpp/numeric/math/sqrt и сюда http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi
#65 #560003
>>559979
Ну вот, ты опять погуглил за дауна с laba2.cpp
#66 #560037
Немного по теме I/O:
Общая инфа по high perfomance I/O
http://stackoverflow.com/questions/1201261/what-is-the-fastest-method-for-high-performance-sequential-file-i-o-in-c
Бенчмарк с ручной/автоматической буферизацией fstream
http://stackoverflow.com/questions/12997131/stdfstream-buffering-vs-manual-buffering-why-10x-gain-with-manual-buffering
Роль копирования буферов в скорости выполнения программы(просаживаем время на байтики и memcpy)
http://stackoverflow.com/questions/10324582/c-ifstreamread-slow-due-to-memcpy
C-style I/O vs C++ streams
http://stackoverflow.com/questions/17468088/performance-difference-between-c-and-c-style-file-io
#67 #560105
>>559977
Ну раз никто не ответил, я отвечу. Далее везде @ означает * (заменил звёздочки в целях, чтобы макаба не сожрала их попарно на курсив).

Как для массивов вида T arr[10] и T@ arr = new T[arr_size] , так и для std::vector<T> , std::string последовательное расположение элементов от нулевого до последнего (размер - 1) является обязательным требованием стандарта языка C++11 . Иными словами,

arr[3] == @(arr + 3) //values
&arr[3] == arr + 3 //addresses

всегда для любого T: как signed, так и unsigned, как char, так и int.

http://ideone.com/9XVSnO -- простейшая иллюстрация

Отмечу, кстати, что люблю мешать указатели с индексами только в одном случае: когда мне необходима прямоугольная матрица значений. Чтобы не создавать массив указателей на массивы типа T, я создаю просто массив типа T размера size = m X n, потом создаю указатель на его начало, во внешнем цикле постусловие для указателя += m, во внутреннем цикле бегаю по индексам указателя 0 ... n-1. В результате код получается ничуть не менее читаемый, чем с двумерным массивом, но нет мучений с указателями на указатели (раньше я так делал) и нет оверхэда по памяти.

Что касательно векторов и строк, если прямо нетерпится поработать с указателями:

std::vector<T> v(10);
v.data() == указатель на начало данных

std::string s;
s.data() == указатель на начало данных == s.c_str() //null-terminated
#68 #560106
>>560105
Он немного не о том спрашивает. Возможны ли дырки между данными, т. е. padding.
#69 #560107
>>560106
Я прямо ответил, что по стандарту C++11 нет, невозможно. Возможно только последовательное расположение.

Если я не прав, то поправьте меня.
#70 #560109
>>560107
Прав, наверное. SO с тобой согласен.
#71 #560114
>>560109
Это и без SO понятно. Если абстрагироваться от архитектуры пека и оставить только стандарт, что такое байт? Это наименьшая адресуемая в крестах ячейка памяти. Из этого сразу вытекает, что адреса, различающиеся на единицу (&ch и &ch+1), отличаются на один байт просто по определению, и никакого паддинга там быть не может.
#72 #560115
>>560114
Но в то же время стандарт не гарантирует, что в байте 8 бит. Там могут быть служебные биты, которые не используются для данных, но они не будут иметь своего адреса, так что это не считается.
#73 #560126
>>560115
Дристанул с этого дауна. Ты бы хоть книжку по модели памяти почитал, по типам адресации, как всё устроено в операционной системе.

Одни дебилы в треде.
#74 #560127
>>560115

>стандарт не гарантирует, что в байте 8 бит.


>могут быть служебные биты,


>они не будут иметь своего адреса



Дристанул тебе в ротешник :DDDD
#75 #560128
>>560126
А теперь открываешь 1.7/1 и понимаешь, что даун здесь ты.
#76 #560129
>>560127
The fundamental storage unit in the C++ memory model is the byte. A byte is at least large enough to contain any member of the basic execution character set (2.3) and the eight-bit code units of the Unicode UTF-8 encoding form and is composed of a contiguous sequence of bits, the number of which is implementation defined.
#77 #560133
>>560129

>Every byte has a unique address.

#78 #560135
>>560129
The memory available to a C++ program consists of one or more sequences of contiguous bytes. Every
byte has a unique address.

Носовал тебе хуев в рот, дебила кусок.
#79 #560136
>>560133
Ну и что тебе не нравится? Например, такие байты стандарт разрешает: [oooooooocc], где o это информационные биты, а c - служебные контрольная сумма в них, rw-метка или еще какая хуйня. У служебных бит не будет отдельного адреса, к ним нельзя обратиться напрямую, но в то же время они будут образовывать "дырки" между соседними восьмибитовыми кусками. Я сказал, что только такие дырки возможны, но считать их не следует, потому что все равно они невидимые для пользователя и не адресуются.
#80 #560137
>>560135
Ты какой-то глупый, зачем ты цитируешь повторно то, что я уже цитировал?
#81 #560138
>>560136
Проследуй к этим >>559954 ребятам, которых я там перечислил. С тобой не о чем говорить.

>служебные биты


>нельзя обратиться


>сунул ему под нос свой хуй выдержку из стандарта С++, а он продолжает нести хуйню

#82 #560139
>>560137
Программирование - это не твоё, закрой этот раздел и не приходи сюда больше.
#83 #560140
>>560138
Мамке своей ты калач под нос сунул. Что в твоей выдержке написано? Что адресуется каждый байт. Где там хоть слово про адресацию отдельных битов, дауненок? Покажи мне, как ты собираешься обратиться к отдельному биту по адресу, без разницы - к служебному или к информационному. Обращаешься к байту по адресу - тебе выдают информационные биты, служебные срезаются, и хуй ты вообще узнаешь их содержимое. Адресует биты он, вообще пушка.
#84 #560143
>>560140
Это информатика, 10 класс. Но ты, видимо, ушел после 9-ого класса в ПТУ на слесаря, поэтому пропустил раздел систем счисления, а в ПТУ не изучают архитектуру процессоров x86 amd64, что такое адресация и что представляет собой память в операционной системе, как с ней работает процессор.

Ты просто дебил из ПТУ без образования. Такие дебилы лезут в профессию, думая, что тут можно получить легкие деньги. Да, их можно получить, но нужны мозги, которых у тебя нет, дебил. Поэтому ты будешь по-прежнему сосать хуи и раздавать листовки, так как на первом же собеседовании после твоего шизофренического бреда тебе перезвонят и будут рассказывать за обедом какой кадр к ним нарисовался, взрываясь хохотом на весь кабинет.
#85 #560144
>>560143

>информатика, 10 класс


>как с ней работает процессор


Не переживай, через пару лет тебе расскажут если ты поступишь на CS.

>память


>в операционной системе


>систем счисления


>процессоров x86 amd64


Можешь не продолжать, я и так уже чуть не пролил кофе.
#86 #560162
>>559599
setWindowFlags(Qt::Popup);
#87 #560192
>>560143
Тот кун всего-лишь пытается сказать, что биты не адресуются и у них нет адреса. Адрес есть у байтов в памяти. У бита нет. К биту ты можешь обратиться по его номеру внутри памяти. Внутри память сначала нужно выбрать байт, а потом можешь работать с битами с помощью битовых операций. Т. е. любой бит не адресуется, а не только служебный.
#88 #560202
Такс-с-с. Сейчас платина.
Чо написать ребят?
#89 #560206
>>560202
То, что на хачкеле надо пиздос как изьебаться.
#90 #560208
>>560206
Ну, там кроме стандартной логики и парсеров всё так пишется. Я вот ебусь в попу с бустовским асио пару дней, хочется чо нибудь написать, а не знаю чо.
#91 #560211
>>560208
Напиши многопользовательскую карточную игру типа в хартстоуна, в которую будут играть боты.
#92 #560212
>>560202
Реализуй генетический алгоритм, например. Да, я прямиком из /b с их машинками.
#93 #560214
Заткнулись нахуй оба. Байты в памяти лежат последовательно, про это и спрашивали.

>Если идет речь о непрерывности массива в памяти, то, например, в случае чаров гарантируется, что они займут именно соседние байты? Или только, что arr [i+1] будет указывать на следующий элемент, но при этом сами элементы могут быть, например, выровнены по одному в слове?



Биты тут вообще причём? Хотя бы в исходном вопросе.
#94 #560216
>>560214
Да ни при чем, я и написал тут >>560114. А потом подумал, что тот кун, возможно, где-то вычитал про служебные биты и интерпретировал их как дырки, вот и решил пояснить про них заодно.
#95 #560248
>>560192
Нет такого понятия как служебный бит памяти в архитектуре процессора. Есть только регистры, но не биты. есть 8 бит, и они формируют 1 байт, это не понимает только дебил-залетчик.
#96 #560251
>>560211
Можно сразу бота для Хартстоуна написать. Или целую фабрику ботов, работающих параллельно, собирающую статистику о противниках, перебирающих и проверяющих стратегии.
93 Кб, 1073x735
#97 #560256
>>560248
Таненбаум, Архитектура компьютера, 6 издание, 97 страница. Уймись уже и пиздуй читать книжки, которые умные дяди для тебя написали.
#98 #560268
>>560256
И что там написано, макакич? Только то, что для помехоустойчивого кодирования нужны дополнительные разряды, в которых хранятся вычисленные определенным образом значения (исходное слово проходит через матрицу, строки которой порождают векторное подпространство кодовых слов). Если слово 11010, то к нему можно приписать дополнительные биты 101, к примеру. И все это хранится в одном регистре.
#99 #560277
>>560268
В дополнение, тут нужно сказать, что служебные биты от помехоусточивого кодирования - не доступны на программном уровне.
То, что происходит там внутри в железе - полезно знать электронщикам и низкоуровневым программистам, ебошущим на Verilog\VHDL

А рядовой С++ макаке такие знание наоборот только навредят, что мы собственно и видим тут

мимпроходил
#100 #560279
Хочу сделать что-то на Qt + Google Translate API. Есть идеи?
#101 #560280
>>560268

>4 ГБ памяти


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


Постой, я тебя знаю. Ты тот чувак, который не имеющий аналогов алгоритм сжатия изобрел, да?
ну не стукай, не стукай #102 #560282

>#include <memory>



>bool* bool_array = new bool[n]();


>std::unique_ptr<bool[]> smart(bool_array);



Допустимо так писать? Утечки памяти точно исключены?
#103 #560283
>>560280

>Ты тот чувак, который не имеющий аналогов алгоритм сжатия изобрел, да?


Съеби, я не страдаю манией изобретательства.
#104 #560284
>>560282
Да, если между строками нет ничего. Конструктор unique_ptr noexcept.
#105 #560288
>>560282
А зачем указатель на указатель? Типа уникальный удалит обычный самостоятельно?
Ньюфаг, простите.
#106 #560289
>>560284
При многопоточности можешь получить утечку.
#107 #560298
>>560288
Это не указатель на указатель. Когда конструируешь unique_ptr, он сам не выделяет никакой динамической памяти. Здесь просто указатель скопируется внутрь unique_ptr, и тот станет владельцем данных, которые выделили в предыдущей строке. В случае одиночных объектов для этого используют make_unique.
>>560289
Неа. Если это стековые переменные, то у других потоков не будет к ним доступа, стеки у всех свои. Статическими локальными они быть не могут, т.к. нет квалификатора static. А глобальные инициализируются до начала работы программы, когда есть только один поток.
#108 #560306
>>560298
Вообще-то возможны варианты, если перегружен operator new, но там надо очень постараться. И вообще за потокобезопасность в этом случае программист отвечает.
#109 #560335
>>559303 (OP)
<устарело> Герберт Шилдт - C++. Базовый курс (2010)
2010. Устарело.

5 лет прошло. Устарело. Вся суть ебаного программизма.
#110 #560344
>>560335
Там устарела небольшая часть, но не расписывать же это в шапке при наличии новейших аналогов. Но вообще да, ты прав, книги весьма быстро устаревают хотя если ты знал кресты в 2010, то тебе не будет трудно изучить новые фичи.
16 Кб, 874x266
#111 #560363
Почему он выдает эту сраную ошибку при компиляции? В ON_ERROR передаю строку.
#112 #560366
>>560298
Куча у всех потоков одна. Юник будет на стеке, да. Но если после new поток переключится и умрёт, то память утечки.
#113 #560371
>>560363
У тебя ; стоит там перед обратным слэшем
#114 #560373
>>560371
Она нужна. Без нее ругается на ее отсутствие.
#115 #560375
>>560373
А, ну да, я неправильно понял, что ты там хочешь сделать.
#116 #560376
>>560366
Какой поток умрет? Если умрет тот, на который переключились, то поток с unique это никак не заденет. А сам поток с unique умереть никак не может, ибо после аллокации в нем нет опасных операций в этих двух строчках. Бывает еще аварийное завершение всей программы из-за abort в другом потоке, сигнала или пропавшего тока в розетке, но такие ситуации к безопасности исключений не относятся, ибо погроммист это не контролирует и было бы вообще бессмысленно говорить о безопасности, если такое считать.
#117 #560377
>>560284

>Конструктор unique_ptr noexcept.


Не понял. Мне что-то изменить во второй из этих подряд идущих строчек?
#118 #560379
>>560363
Ты хочешь вывести один поток в другой, такой перегрузки << нет. Вытащи из c строку и выводи ее.
#119 #560381
>>560377
noexcept это значит, что конструктор не выбросит исключение, что бы ты в него ни пихал.
#120 #560382
>>560381
Я догадываюсь, что значит noexcept, nothrow и т.д. Я спрашиваю, в этих двух строчках надо что-то поменять ещё?

bool* bool_array = new bool[n]();
std::unique_ptr<bool[]> smart(bool_array);
#121 #560383
>>560363
Плохо продумано у тебя. Всю инфу об ошибке следует пихать в исключение и логгировать уже в обработчике исключений. У тебя операции с c могут вызвать новое исключение, и ты потом хер проссышь, что на самом деле произошло. Твоя задача - сделать безопасно и беспалевно наибольший возможный дамп, а уже потом ломиться в небезопасное логгирование.
#122 #560385
>>560382
new можно занести прямо в конструктор unique_ptr.
#123 #560390
Безопасно ли кастовать LONG в WNDPROC?
#124 #560392
>>560379
Спасибо, няша!
#125 #560399
>>560385
не, я хочу в функции сырой указатель bool_array пихать напрямую, а не smart.get()
#126 #560409
Няши, поясните дауну. Есть класс, значица.
class Weapon
{
protected:
\tint atk;
public:
\tvoid set_atk(int atk1);
\tint get_atk();
\tWeapon();
\tWeapon(int atk1);
\tvirtual ~Weapon();
};
Есть функция get_atk()
int Weapon::get_atk()
{

return Weapon::atk;
}
И вот тут самая беда. Эта пидрила почему-то вечно норовит вылететь. Что обращение через "имя_объекта.get_atk()", что через "имя_объекта->get_atk()" вылетает прога нахуй. Пытался есессно разными способами, для "имя_объекта.get_atk()" конструктор по умолчанию, а для -> через Weapon *Spear = new Weapon(21);

ЧЯДНТ?
#127 #560415
>>560399
Хотя какая нахуй разница, он же копируется. Блядь, почему меня клинит именно на этом моменте. Пиздец.
#128 #560487
>>560399
Ты упорот штоле, лол? Определись уже с задачей. Ты либо хочешь владеть данными, на которые указывает указатель, и тогда тебе придется использовать smart.get (), либо имеешь сырой указатель, не владея данными, но тогда ими должен владеть кто-то еще от кого ты получил указатель. Выделяешь память сам - обязан обеспечить владельца. Не знаю, если тебя так клинит на get (), то один раз вызови его, запомни в другом raw-pointer, и передавай в функции уже его, но, блядь, владеющий указатель все равно должен оставаться в скоупе. И да, я не понимаю, почему ты не хочешь передавать const unique_ptr &, с которым можно делать то же, что и с raw-pointer (*, ->, == nullptr, ну ты понел), только delete делать нельзя.
#129 #560494
>>560409
В теле функции Weapon:: излишне.

Покажи тела конструкторов.
#130 #560553
Пацаны, есть такая штука - cling, не хотите забацать опенсорс, который сделает его юзабельным? С++ REPL, мечта же.
#131 #560561
>>560487
1) Именно, что упорот. Тупняк третий день не проходит. Так всё нормально?

void tvoya_mama(bool@ weight) {}

std::unique_ptr<bool[]> smart(new bool[n]());
bool@ raw = smart.get();
tvoya_mama(raw);

2)

>И да, я не понимаю, почему ты не хочешь передавать const unique_ptr &, с которым можно делать то же, что и с raw-pointer (*, ->, == nullptr, ну ты понел), только delete делать нельзя.



Работать по ссылке это ж медленно. Вот обращаюсь я к каждому элементу, и что, по ссылке обращаться? smart.get()[0] , где аргумент функции const std::unique_ptr& smart

?
#132 #560596
>>560553
Я впишусь, если еще пара человек наберется. А то будет как с РАСПРЕДЕЛЕННОЙ БОРДОЙ. cling = clang + clion, агагагагаг.
#133 #560598
>>560561
Нормально, но выглядит уебищно. Нормальные посоны не думают о такой хуйне, как экономия 1-2 разыменований на всю программу. То, что ты делаешь - преждевременная оптимизация в чистом виде, ты бы на каком-нибудь cache-friendly алгоритме выиграл на пять порядков больше производительности.
#134 #560599
>>560596
Ну у борды нет задач. А здесь месяц работы и все тянки течь будут, а еще можно будет показать на собеседовании ГИТХАБ, бгг
#135 #560622
>>560277
Лол мимозаходиещё

Они эту мандулу с коррекцией ошибок уже полтреда засрали.
#136 #560631
>>560599
Распиши штоле в треде кратенько - что это за ебала, задачу в целом, делал ли кто-то нечто подобное чтобы велосипедов по минимуму плодить.
#137 #560634
>>560553
Если там надо пилить интерпретатор крестов, то однозначно и десять человек заебутся реализовывать поддержку стандарта, даже частичную. Помните ту кулстори из 90-х, как чуваков из ИСП бельгийцы наняли компилятор писать? Это не шутки, хуле, сейчас 2.5 полноценных компилятора на весь мир, и девелоперы там не питурды далеко.
#138 #560635
>>560634
Используя кланг, может и получилось бы
#139 #560636
>>560635
А что у них реализовано уже? Там вроде увесистый код такой, на гитхабе-то.
#140 #560637
>>560631
Есть cling, это вполне бодрый C++ REPL на основе clang и LLVM JIT. Его не надо пилить, он есть (http://llvm.org/devmtg/2010-11/Naumann-Cling.pdf). Его сделали в ЦЕРНе для работы с системой ROOT - обрабатывать данные с коллайдера. Но пользоваться им неудобно, потому что это не python с import pyopencv, там нужно уныло прописывать include, затем подключать .so библиотеку, и делать это все в сосноли.

Хочется сделать что-то удобное, чтобы, например не брать pyopencv, а сразу делать прототип на С++. Т.е.
1. Среду для работы типа ipython notebook. Можно на базе ipython notebook и сделать. Полноценную IDE типа матлаба мы не потянем, конечно.
2. Легкое использование библиотек. Типа, сделал %import opencv и все, он автоматом сделал нужные #include и подключил нужные .so файлы. Думаю, такой патч можно отдать в апстрим.
3. Различные синтаксические плюшки для удобной работы с REPL.
4. И так далее.
#141 #560638
>>560553
А в чем профиты от REPL с прикруткой к ванильному компилятору-то, оно же тормозить будет адски небось? Алсо, если концепция разрешает только программы из одного выражения, то реализовать это можно за один вечер, без сложных операторов синтаксис крестовых выражений ммаксимум стандартный.
#142 #560639
>>560638
Учитывая, что там llvm jit, оно бодро бегает на уровне -O0 оптимизации. Не -O2, конечно, но оно и не надо для прототипирования.
#143 #560640
>>560637
А, ну это другое дело.
#144 #560641
>>560637
Надо тогда рекрутировать моар анонов и начать думать подробнее. А потом и спецификации запилим, если попрет движуха.
#145 #560642
https://www.youtube.com/watch?v=BrjV1ZgYbbA вот демка, чел прикрутил cling прямо к qt gui.
#146 #560694
>>560637

>Среду для работы типа ipython notebook. Можно на базе ipython notebook и сделать. Полноценную IDE типа матлаба мы не потянем, конечно.


Есть наработки:
https://github.com/jupyter/notebook
https://github.com/minrk/clingkernel
72 Кб, 1182x821
#147 #560707
>>560641
>>560640
>>560639
>>560638
>>560637

Суть в двух словах: C++ web-based REPL на основе ipython notebook, такое, каким удобно пользоваться. Целевая аудитория - различные люди, которые пишут и отлаживают алгоритмы для С++, требующие анализа картинок, графиков и т. п., чтобы избавить их от необходимости промежуточного прототипирования на скриптовом языке, ну а также постоянного цикла рекомпиляции-отладки.

Основа - интерпретатор C++ cling (основан на базе clang и LLVM JIT, умеет С++11), jupyter (бывший ipython notebook), cling-плагин для jupyter.
Cling:
https://ecsft.cern.ch/dist/cling/current/ - бинарники
https://root.cern.ch/cling-build-instructions - сорсы

Jupyter:
Например, sudo pip install jupyter

Cling Kernel:
https://github.com/minrk/clingkernel

Какие-то из фич могут решаться настройками cling, какие-то можно сделать на уровне python-прослойки. А что-то, может, потребует лезть в сам интерпретатор.

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

1. rawInput

Сейчас есть toggle: .rawInput 0/1. При rawInput 0 введенная строка интерпретируется как что-то типа print(строка). При rawInput 1 - как С++ код. Предлагаю избавиться от этого режима, сделав .rawInput по дефолту и $yoba считать как печать выражения yoba.

Как сделать: пропатчить clingkernel.

2. Простой #include<..>

#include <..> должен автоматически подключать библиотеку. Сделать это можно на уровне конфига:
<opencv/core.hpp>:/usr/lib/libopencv.so

Это - не очень хорошо, потому что зардкод. Можно заставить искать нужную .so на компьютере. CMake тут нельзя подключить? Оно же умеет искать нужный хедер и .so с помощью подключаемых модулей.

Как сделать: тоже можно на уровне clingkernel, но автопоиск библиотек в системе - это вопрос.

3. При двойном объявлении функции:

int yoba() {
return 5;
}
input_line_17:1:5: error: redefinition of 'yoba'

Что есть бред, конечно, функции должны уметь переопределяться

Как сделать: не знаю. Видимо, придется лезть в интерпретатор.

4. Вывод красивых графиков, видео и звуков и прочего говна, как в браузере, так и в отдельном окне. Как цель #1 предлагаю запилить поддержку основых структур данных STL и OpenCV.

Далее более маняфичи:

5. Синтаксические плюшки, типа быстрых лямбд (x => y разворачивается в struct yoba { template<class T> operator()(T x)... )).

6. Подсказки, ускоряющие ввод, типа при объявлении новой переменной y=5 автоматом приписывалось бы auto, и double enter решал бы вопрос.
yoba(x,y,z) может разворачиваться в template<X,Y,Z>yoba(X x, Y y, Z z) и тому подобное. Синтаксис языка Clay может помочь.

7. Добавляйте идеи.

https://gist.github.com/anonymous/17c49b1eea3a87269460
72 Кб, 1182x821
#147 #560707
>>560641
>>560640
>>560639
>>560638
>>560637

Суть в двух словах: C++ web-based REPL на основе ipython notebook, такое, каким удобно пользоваться. Целевая аудитория - различные люди, которые пишут и отлаживают алгоритмы для С++, требующие анализа картинок, графиков и т. п., чтобы избавить их от необходимости промежуточного прототипирования на скриптовом языке, ну а также постоянного цикла рекомпиляции-отладки.

Основа - интерпретатор C++ cling (основан на базе clang и LLVM JIT, умеет С++11), jupyter (бывший ipython notebook), cling-плагин для jupyter.
Cling:
https://ecsft.cern.ch/dist/cling/current/ - бинарники
https://root.cern.ch/cling-build-instructions - сорсы

Jupyter:
Например, sudo pip install jupyter

Cling Kernel:
https://github.com/minrk/clingkernel

Какие-то из фич могут решаться настройками cling, какие-то можно сделать на уровне python-прослойки. А что-то, может, потребует лезть в сам интерпретатор.

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

1. rawInput

Сейчас есть toggle: .rawInput 0/1. При rawInput 0 введенная строка интерпретируется как что-то типа print(строка). При rawInput 1 - как С++ код. Предлагаю избавиться от этого режима, сделав .rawInput по дефолту и $yoba считать как печать выражения yoba.

Как сделать: пропатчить clingkernel.

2. Простой #include<..>

#include <..> должен автоматически подключать библиотеку. Сделать это можно на уровне конфига:
<opencv/core.hpp>:/usr/lib/libopencv.so

Это - не очень хорошо, потому что зардкод. Можно заставить искать нужную .so на компьютере. CMake тут нельзя подключить? Оно же умеет искать нужный хедер и .so с помощью подключаемых модулей.

Как сделать: тоже можно на уровне clingkernel, но автопоиск библиотек в системе - это вопрос.

3. При двойном объявлении функции:

int yoba() {
return 5;
}
input_line_17:1:5: error: redefinition of 'yoba'

Что есть бред, конечно, функции должны уметь переопределяться

Как сделать: не знаю. Видимо, придется лезть в интерпретатор.

4. Вывод красивых графиков, видео и звуков и прочего говна, как в браузере, так и в отдельном окне. Как цель #1 предлагаю запилить поддержку основых структур данных STL и OpenCV.

Далее более маняфичи:

5. Синтаксические плюшки, типа быстрых лямбд (x => y разворачивается в struct yoba { template<class T> operator()(T x)... )).

6. Подсказки, ускоряющие ввод, типа при объявлении новой переменной y=5 автоматом приписывалось бы auto, и double enter решал бы вопрос.
yoba(x,y,z) может разворачиваться в template<X,Y,Z>yoba(X x, Y y, Z z) и тому подобное. Синтаксис языка Clay может помочь.

7. Добавляйте идеи.

https://gist.github.com/anonymous/17c49b1eea3a87269460
#148 #560737
>>560598
Ага, спасибо за ответы. Теперь попробую отстать от доски и сходить на лоботомию.
#149 #560760
>>560707
1. Нахуя $yoba-то? Лучше в нормальном крестовом синтаксисе сделать, типа << yoba, чтобы согласованность была.
2. Мне кажется, достаточно будет прикрутить ввод путей к additional dependences, тебе же не каждые пять минут их вводить. Поиск хуй сделаешь нормально, ибо часто библиотеки не устанавливают в систему, а кладут в репозиторий во избежание проблем переноса. А искать по всей системе ты заебешься, тем более, имена не унифицированы. Можно по умолчанию подключать все либы из своей папки, алсо.
3. Это побеждается дополнительным декорированием имен функций, шоб при переопределении была формально уже другая функция, а ссылки на старую перенаправились на нее.
4. SFML прикрутить, например, и сделать пару встроенных функций для отрисовки. Ну и предоставить пользователю доступ без дополнительных прикручиваний. OpenCV имхо слишком тяжелая, чтобы ее всю тянуть за собой по умолчанию, тем более, там 95% фич не нужны слишком уж часто.
5. Лол.
6. Нормально это реализовано (т.е. так, что не хочется отключить подсказки нахуй) только в студии, но попробовать можно, да.
#150 #560776
Почему переменные со static storage duration должны быть инициализированы на момент запуска программы?
#151 #560789
#152 #560806
>>560363
потому что нужно cerr << c.str() << endl делать
у ostream нет перегрузки для operator<< для типа stringstream

алсо, гроб-гроб-кладбище-макрос, сделай свой собственный класс эксепшонов и логируйся в нем
#153 #560811
>>560776
Почему ты так решил?
#154 #560813
>>560279
Перевод текста на картинках. Скармливаешь софтинке изображение, она находит текст, гуглом переводит и втыкает обратно. Как приложение на ведроиде.
#155 #560823
>>560811
По стандарту языка C++.
http://stackoverflow.com/questions/5474349/initialization-of-objects-with-static-storage-duration-in-c-vs-c

Но это не отвечает на вопрос, почему так.
#156 #560835
>>560760

>1. Нахуя $yoba-то? Лучше в нормальном крестовом синтаксисе сделать, типа << yoba, чтобы согласованность была.


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

>Мне кажется, достаточно будет прикрутить ввод путей к additional dependences, тебе же не каждые пять минут их вводить.


Это больше похоже на msvs подход, но для первой версии хорошая мысль. Подобные пути cling уже имеет, нужно только составить маппинг типа хедер:имя_библиотеки.

>Это побеждается дополнительным декорированием имен функций, шоб при переопределении была формально уже другая функция, а ссылки на старую перенаправились на нее.


В любом случае надо лезть в интерпретатор и спрашивать у cling-чуваков, как это лучше сделать. По остальному - ты пиши лучше хотелки. Детали реализации на следующем этапе обсудим.
#157 #560879
>>560823
static-член класса инициализируется при первом обращении, static-локальная переменная - при первом вызове объемлющей функции. Так что ты хуйню написал.
#158 #560902
Прошу прощения.
Так и не понял, когда union использовать вместо struct, и какие преимущества будут у variant в c++1z?

Если кому не лень, конечно.
#159 #560906
>>560823
Ты имеешь ввиду почему нулем инициализируется? Чтобы избежать трудновоспроизводимых багов, если ты забудешь ее проинициализировать правильно - если не записать нулем там будет случайное содержимое что будет труднее заметить чем если там будет 0. Рекомендуется все переменные всегда инициализировать при обновлении 0. Ну или там 0xDEADBEEF для мамкиных хакиров.
6 Кб, 1169x200
25 Кб, 300x100
#160 #560920
Вечер в хату добрый, дорогие дпузья.
Возможно, сегодня именно вы сможете помочь мировому искусству!

Дело в том, что есть один Adobe Illustrator. В этом Иллюстраторе есть возможность биндить клавиши. И, в отличие от некоторых других программ, работающих с компьютерной графикой, в иллюстраторе эта возможность ограничена. Некоторые элементы интерфейса можно биндить только на кнопки, другие только на сочетание клавиш - ctrl + кнопка и т.д.
У меня с их этого не в меру охуенного решения немного бомбонуло, и вот я здесь.
Можно ли сделать, чтобы ограничение на бинды клавиш исчезли?
Я в коде не шарю, но на пеке есть работающая студия.

Карочи, надеюсь на вас.
#161 #560938
>>560760

> Это побеждается дополнительным декорированием имен функций, шоб при переопределении была формально уже другая функция, а ссылки на старую перенаправились на нее.


Вообще, спасибо за идею. У такого языка, как С++, большие проблемы со стейтом интерпретатора, потому что после jit-компиляции биндится все гвоздями. Т.е.
int yoba(){
#162 #560943
Отправилось раньше времени. Т.е.
$int yoba() {}
$int yoba2() {yoba();} <= здесь вызов yoba превратит по сути в переход по указателю
$int yoba() {/redifinition/} //и yoba2 не изменится
А декорирование top-level функций и переменных (?) помогло бы от этого.
#163 #560962
>>560920
съеби
#164 #560970
>>560920
Пошел нахуй.
#165 #561077
>>560902
Если честно, я даже не могу вспомнить ни разу, когда я бы пользовался union. Я не уверен, что это легаси из C, но необходимость в них точно не ощутмшь часто.
>>560906
Я не про примитивные типы говорил же, а про момент, когда вызывается конструктор - он не всегда до запуска программы. На этом, например, синглтоны основаны. А про инициализацию примитивных типов поддвачну, это хороший тон.
>>560938
Конечно, это костыль еще тот. Надо будет его по уму сделать, чтобы память не засорялась старыми версиями функций.
>>560943
Функции жи и так вызываются по указателям всегда, там и делать ничего не придется. А для переменных, наверное, такое не нужно, если мы статическую типизацию сохраняем. Просто очередное присваивание будет.
#166 #561079
>>560943
А, вообще я не сразу понял тебя. Да, это проблема. На первый взгляд вижу только радикальное решение - запретить обычные функции, оставить глобальный каталог std::function. Тогда лишняя косвенность будет, но пользователь будет юзать указатели на них, и достаточно будет перенаправить сам объект в каталоге на переопределенную функцию.
#167 #561082
>>560920
Вешаешь хук на обработчик нажатий и пишешь свою функцию.
#168 #561083
>>560902
Union изначально задумывался для экономии памяти/динамических аллокаций. Применяются они на самом деле нечасто, всегда можно обойтись без них - так что можно сказать что union нужны для оптимизации некоторых конструкций. На stackoverflow есть толковые вопросы с кучей хороших объяснений и примеров.
http://stackoverflow.com/questions/2310483/purpose-of-unions-in-c-and-c
http://stackoverflow.com/questions/2310483/purpose-of-unions-in-c-and-c
#169 #561089
>>561083

>динамических аллокаций


Я имел в виду количества динамических аллокаций памяти(т.к. "разнотиповую" переменную можно реализовать через наследование, с дополнительным уровнем косвенности - и придётся перевыделять память при смене "типа" переменной).
#170 #561109
>>561079
Да, я примерно об этом. Надо будет лезть в исходники cling и препроцессить AST, чтобы заменить вызовы top level (не #include) функций на косвенные через каталог. Сам top level должен быть во многом динамическим языком.
#171 #561175
>>560906
Ну так локальные переменные вполне себе живут с мусорным значением. Почему глобальные пре-инициализируются нулём, а локальные нет?
#172 #561177
Сап.
Есть такой код
http://pastebin.com/wRDtedrw
Как мне сделать его рабочим? Нужно чтобы в этом классе было поле с колбеком, который может быть и обычной функцией, и методом какого-то класса
вы ток намекните, а дальше я сам
#173 #561179
>>561175
Для локальных это, например, отдельная операция, а для глобальных - нет, их загрузчик инициализирует.
#174 #561293
Котаны, подскажите, как мне заставить работать метод .contains у QVector?
В нем хранятся такие объекты:
https://gist.github.com/anonymous/d360ba72bc092124dbb9
Компилятор ругается вот так:
https://gist.github.com/anonymous/f2196d542431d08b22de
#175 #561294
>>561293
И правильно ли я выделяю strlen() + 1 байт под строки?
#176 #561297
>>561293
Очевидно, твой переопределенный тобой HIDDeviceInfo::operator== принимает аргументом HIDDeviceInfo&, а должен const HIDDeviceInfo&, показав тем, что он этот аргумент не изменит.
#177 #561301
>>560707
Привлекаю внимание.
#178 #561317
>>561297
[code]
friend bool operator ==(const HIDDeviceInfo &dev1, const HIDDeviceInfo &dev2);
[/code]
Не помогло
'bool HIDDeviceInfo::operator==(const HIDDeviceInfo&, const HIDDeviceInfo&)' must take exactly one argument
bool HIDDeviceInfo::operator ==(const HIDDeviceInfo &dev1, const HIDDeviceInfo &dev2){
^
#179 #561325
>>561317
Я ответил тебе HIDDeviceInfo, когда еще только ошибку прочитал, а в код не смотрел. У тебя это функция-друг, а не член класса, поэтому убери HIDDeviceInfo::
Этот префикс означает, что идет определение метода класса HIDDeviceInfo
КОНСТРУКТОРЫ Алёна #180 #561336
Ребята, разбираю пример из книги и один вопрос всплыл.
Вот код :

http://ideone.com/E6ZSwV

это класс U. Он по сути нихрена не делает.
Далее я создаю вектор Этого типа.

>vector<U> vector1;


>vector<U> vector2(3);



Во втором случае, я не могу разобраться ,
как вызывать конструктор МОЕГО класса, а не конструктор

Думаю, что ответ простой, но я не хочу отвлекаться и опять нырять в классы...
В общем подскажите, плз
#181 #561338
>>561336

> как вызывать конструктор моего класса , помимо конструктора самого вектора?

#182 #561343
>>561336
Ты хочешь вызывать U::U(unsigned long n) ?

Например так: vector<U> vector2(U(3));
843 Кб, 3384x1736
КОНСТРУКТОРЫ - ВЕСЬ ПРИМЕР Алёна #183 #561350
И раз пошла такая пьянка, то весь пример :

http://ideone.com/Tem3Bm

Но он должен выдать (см. картинку):

vector2[0].genetation : 1
vector2[1].genetation : 1
vector2[2].genetation : 1
Общее количество копирований : 3


Но не выдает.
Автор далее поясняет по тексту, но я не догоню.
#184 #561351
>>561336
Мда, проведу аналогию: у тебя есть гараж (vector) под машину (U). Ты спрашиваешь как завести машину в гараже, но машины в граже и нет.

>но я не хочу отвлекаться и опять нырять в классы...


Еще один залетыш короче, забей, программирование не твоё.

Вектор хранит элементы, ему до пизды на твои конструкторы U. Ты должен создать объект класса U и только потом положить его в вектор. А то что там указана тройка:

>vector<U> vector2(3);


Это число передается в конструктор вектора, указывая ему размерность для трех элементов.

В-общем, забей. Ты слишком глуп.
#185 #561355
>>561350
Я не понял из того, что ты теперь написал, так что соси.

А еще вектор можно инициализировать вот так

std::vector<U> vector1{ U(1), U(1488), U() };
#186 #561359
Или может тебе такое нужно?

auto xyu = U(1488); // generation 0
auto pizda = U(xyu);
std::vector<U> vector1{ U(xyu), U(xyu) }; // generation 1
#187 #561362
>>561351

На счёт гаража аналогию я вывез.
просто создал гараж на три машины.

спасибо. догнал.

Но тогда нахрена автор вообще создал именно такой пример, если альтернативные конструкторы объекта вообще не используются.

Можешь посмотреть этот пример
>>561350
мой вопрос исходит из него.
#188 #561367
>>561362

>Можешь посмотреть этот пример


>>>561350


>мой вопрос исходит из него.



Я >>561343
>>561355
>>561359
это все я, и я видел твой изначальный вопрос
#189 #561369
>>561367
с конструктором я уже разобрался.
та хуйня, которую я хотел - не канает.
ступил - признаю.
но у меня всё-равно есть вопрос :

>>561350
#190 #561371
>>561369
Почему же не выдает? По твоей ссылке на ideone очень даже выдает.
#191 #561372
>>561371
блеять.
точно.
а на моём компе пусто. хотя код тот же самый.
не пойму.
#192 #561374
>>561372
Если хочешь и тут помощи, то распиши подробнее.
#193 #561379
>>561374
>>561371

Всё, спасибо.
я компилил как C++11.
Убрал -std=C++11
И результат выдал как из книги.
#194 #561381
>>561374
>>561371
>>561379
>>561351

1. Есть мысли, какой фрамгент кода мог быть проблемным? Таким что вызывает такую вот байду.

2. Можешь пояснить за цикл самый последний в листинге? там же не происходит явного копирования и т.д.
#195 #561382
>>561381
Да я не понял, что у тебя за байда. Не может такого быть, что с -std=c++11 ничего не выдает, а без него - печатает что надо.

Эмм, последний цикл - это строчки 44-46, которые печатают?
#196 #561385
Ультимативного байтоёбства вопрос. Хочу сэкономить несколько байт/тактов процессора. "@" означает "*" в рамках борьбы с макабой. Имеются три функции:

void f_1(int i, size_t n, int@ data) { ... }
void f_2(int i, size_t n, int@ data) { ...; f_1(i, n, data); }

void f_3() { int i = ...; size_t n = ...; int@ data = ...; f_2(i, n, data); }

f_3() вызывает f_2(i, n, data), в которой сначала идут какие-то вычисления с использованием int@ data, а потом вызывается f_1(i, n, data).

Теперь, собственно, вопрос: имеет ли смысл в void f_2(int i, size_t n, int@ data) вместо тупого копирования первых двух аргументов поставить ссылки? Чтобы стало вот так:

void f_1(int i, size_t n, int@ data) { ... }
void f_2(int& i, size_t& n, int@ data) { ...; f_1(i, n, data); }

Т.е. с сделать это с целью, чтобы первая функция брала аргументы напрямую из третьей, без копирования во вторую функцию? Или накладные расходы неизбежны и дешевле копировать во вторую?
#197 #561389
>>561382

>Эмм, последний цикл - это строчки 44-46, которые печатают?


: Да, именно они.

> Не может такого быть, что с -std=c++11 ничего не выдает


: Я тоже так подумал, но
Ты можешь в том же Ideone попробовать. там правда не нашёл C++11, но есть С++14. он даст пустой вывод
#198 #561401
>>561389
Пустой вывод в смысле все по нулям? Да, так и выдает, и это нормально. Потому что в C++11 добавили move-semantics и всякие оптимизации, и теперь там при создании векторов не нужно ничего копировать - так быстрее и лучше. Потому ничего не копируется, и нули везде.
#199 #561408
>>561385
force inline пропиши и убедись, что оно выполняется.
#200 #561421
>>561401
А за сам цикл можешь пояснить.
Просто не пойму, в каком месте там происходит вызов конструктора, который увеличивает статическую переменую
#201 #561431
>>561421
А в цикле он не происходит, наверное.

Я там писал код, чтобы показать что к чему, но ideone глюканул, и мне лень его снова писать. Короче засунуть отладочный вывод чего-нибудь в конструктор копирования и добавь еще выводов чего-нибудь в консоль после создания векторов, после ассертов и в тело цикла, и тогда увидишь, во время каких шагов у тебя вызывается конструктор копирования.
#202 #561437
>>561408
А ссылки-то ставить или нет?
#203 #561439
>>561431
Да. Точно.

vector<U> vector2(3);

Всё делается в самом начале/
Всё-равно пока не сообразил, почему так.
но хрен с ним. позже вернусь к этому впоросу.
спасибо , бро.
#204 #561446
>>561439
Потому что посмотри сюда http://en.cppreference.com/w/cpp/container/vector/vector

Там используется конструктор номер 2 - с параметром по-умолчанию. То есть там как будто происходит

vector vector1(3, U()), и этот U() в C++ до 11 версии передается как const U&, но программа ведь не может взять и объект по константной ссылке засунуть в вектор 3 раза - получается, ей надо его скопировать. Вот она и копирует.
#205 #561455
>>561437
В случае инлайна нет разницы, в случае отсутствия инлайна - не надо ставить, лишняя косвенность хуже копирования одного инта.
#206 #561460
>>561455

>лишняя косвенность хуже копирования одного инта


Почему?
#207 #561484
>>561460
Дырявая абстракция плоской модели памяти: есть регистры, кэш и прочая хуетень. Современный компилятор твои инты скорее всего передаст через регистры, поэтому ему твои костыли в виде ссылок особо не нужны. Если бы было const int&, это еще имело какой-то смысл, но не так.
#208 #561488
>>561484
Именно, что const. Я просто забыл дописать:

void f_1(const int i, const size_t n, int@ data) { ... }
void f_2(const int i, const size_t n, int@ data) { ...; f_1(i, n, data); }

void f_3() { int i = ...; size_t n = ...; int@ data = ...; f_2(i, n, data); }
#209 #561490
Эх, так дело и не долшло до contains.
Застрял на другом, суть проблемы:
https://gist.github.com/anonymous/836ec84e046a5866874c

Код HIDDeviceInfo:
https://gist.github.com/anonymous/18b03f082d45e602ce6d
#210 #561498
>>561488
Тогда норм. Константную ссылку надо ставить везде, где можешь.
#211 #561508
>>561177
Ну наконец-то, блядь, хороший вопрос кто-то задает.

Смотри, все оче просто. Ты сделал cool_object, чтобы аргументы шаблона cool_object_t выводились из типов аргументов функции при его создании, и можно было писать auto. Но тут есть проблема. Когда ты пихаешь в cool_object не std::function, а нечто, что кастуется в нее указатель, лямбду, метод класса, автоматический вывод шаблонных аргументов не сработает. Почему? Потому что он происходит до разрешения перегрузки и тупо подставляет неизменный тип аргумента функции который не std::function, пытаясь найти подходящие шаблонные аргументы для вывода. У него это, естественно, не получается, и он выдает ошибку.

Чтобы это исправить, ты можешь, во-первых, всегда кастовать аргумент из указателя или что там у тебя в std::function перед передачей в cool_object, но это будет не оче красиво. Еще ты можешь явно указывать аргументы шаблона но это еще менее красиво, и вообще отпадает надобность в cool_object.

Но ты, разумеется, хочешь сделать красиво, чтобы вся эта ебала корректно распознавала, что ты там в нее пихнул. Для этого ты можешь сделать по одной перегрузке cool_object для std::function, указателей, указателей на члены, ну в общем для всего, что ты туда собираешься пихать:

[code lang="cpp"]
template <typename R, typename ... Args>
auto cool_object (R (t) (Args ...))
{
\treturn cool_object_t <R, Args ...> {t};
}

template <typename T, typename R, typename ... Args>
auto cool_object (R (T::
t) (Args ...))
{
\treturn cool_object_t <R, T&, Args ...> {t};
}
[/code]

У такого подхода есть минус - если ты хочешь пихать туда самописные функторы, то придется либо предоставлять в них using-поля, через которые общая версия cool_object сможет вытянуть информацию о том, что ей пихать в шаблонные аргументы создаваемой std::function, либо предоставлять по отдельной перегрузке для каждой новой комбинации параметров. Лямбды тогда тоже можно будет пихать, но со SFINAE-изъебствами.

А общего способа, чтобы из единственного шаблонного параметра как-то достать R (Args...), нет, к сожалению. И это понятно, ведь в общем случае у класса может быть несколько перегруженных operator (), и тогда, например, возвращаемый тип у него не определен строго.

Еще, по поводу "коллбэков". На всякий случай напомню, что в сторонний C-код нельзя передавать коллбэками ничего, кроме глобальных функций. Даже static методы нельзя, а уж обычные методы и подавно. Там какая-то ебала с соглашениями о вызовах, но в итоге выходит так, что это явно запрещено и вызывает UB хотя на практике часто работает.
#211 #561508
>>561177
Ну наконец-то, блядь, хороший вопрос кто-то задает.

Смотри, все оче просто. Ты сделал cool_object, чтобы аргументы шаблона cool_object_t выводились из типов аргументов функции при его создании, и можно было писать auto. Но тут есть проблема. Когда ты пихаешь в cool_object не std::function, а нечто, что кастуется в нее указатель, лямбду, метод класса, автоматический вывод шаблонных аргументов не сработает. Почему? Потому что он происходит до разрешения перегрузки и тупо подставляет неизменный тип аргумента функции который не std::function, пытаясь найти подходящие шаблонные аргументы для вывода. У него это, естественно, не получается, и он выдает ошибку.

Чтобы это исправить, ты можешь, во-первых, всегда кастовать аргумент из указателя или что там у тебя в std::function перед передачей в cool_object, но это будет не оче красиво. Еще ты можешь явно указывать аргументы шаблона но это еще менее красиво, и вообще отпадает надобность в cool_object.

Но ты, разумеется, хочешь сделать красиво, чтобы вся эта ебала корректно распознавала, что ты там в нее пихнул. Для этого ты можешь сделать по одной перегрузке cool_object для std::function, указателей, указателей на члены, ну в общем для всего, что ты туда собираешься пихать:

[code lang="cpp"]
template <typename R, typename ... Args>
auto cool_object (R (t) (Args ...))
{
\treturn cool_object_t <R, Args ...> {t};
}

template <typename T, typename R, typename ... Args>
auto cool_object (R (T::
t) (Args ...))
{
\treturn cool_object_t <R, T&, Args ...> {t};
}
[/code]

У такого подхода есть минус - если ты хочешь пихать туда самописные функторы, то придется либо предоставлять в них using-поля, через которые общая версия cool_object сможет вытянуть информацию о том, что ей пихать в шаблонные аргументы создаваемой std::function, либо предоставлять по отдельной перегрузке для каждой новой комбинации параметров. Лямбды тогда тоже можно будет пихать, но со SFINAE-изъебствами.

А общего способа, чтобы из единственного шаблонного параметра как-то достать R (Args...), нет, к сожалению. И это понятно, ведь в общем случае у класса может быть несколько перегруженных operator (), и тогда, например, возвращаемый тип у него не определен строго.

Еще, по поводу "коллбэков". На всякий случай напомню, что в сторонний C-код нельзя передавать коллбэками ничего, кроме глобальных функций. Даже static методы нельзя, а уж обычные методы и подавно. Там какая-то ебала с соглашениями о вызовах, но в итоге выходит так, что это явно запрещено и вызывает UB хотя на практике часто работает.
#212 #561509
>>561498
Даже если это int , к которому часто обращаются внутри этой функции (проверить, больше он семи или ещё что)
#213 #561510
>>561498
>>561509
fix:

Даже если это int , к которому часто обращаются внутри этой функции (проверить, больше он семи или ещё что)?
#214 #561513
>>561385
Скорее всего нет, int и size_t обычно по размеру точь в точь как указатели, а ссылки реализованы через указатели.
#215 #561518
>>561509
Я бы не стал ставить const & для примитивных типов на самом деле. Если ты передашь их по значению, то изменение внутри функции все равно не испортит ничего в вызывающем коде, ты максимум что сможешь - насрать под себя, изменив аргумент внутри функции, а потом его снова считав, думая, что он остался старым. А косвенности не будет зато.
#216 #561524
>>561518
Да компилятор разберется, тут вопрос в том, что иммутабельность по умолчанию - добро.
#217 #561566
Крестаны, посоветуйте map-контейнер, который кидает исключение если обращаешься к элементу по несуществующему ключу. Потокобезопасность, етц не нужны.
#219 #561591
>>561577
Нужен контейнер, не требующий конструктор по умолчанию
#220 #561598
>>561591
Он не требует, если ты не вызываешь методы, которые его используют. Юзай emplace вместо insert, или вставляй готовые объекты.
#221 #561640
>>561598
Ок, спасибо
#222 #561749
А по оптимизации кода посоветуйте что нибудь почитать, можно даже что то общее, а не конкретно про кресты.
#223 #561779
>>561749
Булка, Мейхью - Effective C++ Programming Techniques, например.
#224 #561811
Сап, /pr/. Вкатываюсь к тебе со своей моральной дилеммой.

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

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

Да, так можно сделать, но... Это как-то слишком по-джавовски. Я ненавижу стиль Java, со всей её энтерпрайзнутыми стандартами, фабриками абстрактных фабрик, ужаснейшим принципом построения программ и кошмарнейшими соглашениями о стиле кода. Это пиздец. И я хочу, чтобы в моём проектике не было ничего от джавы, совсем ничего.

Что можно сделать?
#225 #561814
>>561811
Например, void Yoba::registerListener(std::function<void(int)> callback) { this->listeners.add(callback); }
#226 #561815
>>561814
Ну, в смысле, не add, а push_back, ну ты понел. Ну или можно рассмотреть систему сигналов-слотов на boost::signal, но это без меня.
#227 #561869
Господа плюсовики, как вывести на экран то, что поступает в /dev/usbhid? Там будут координаты мыши.
#228 #561870
>>561869
Не так спросил, вот я мудак. Как переместить курсор на экране в положение, которое приходит из /dev/usbhid? Вот так правильно.
#229 #561897
А где здесь линукс-программистов-тред?
#230 #561902
>>561897
Любой.
#231 #561903
>>561902
Ну так подскажи же >>561870.
2 Кб, 623x134
#232 #561904
>>561903
Гугли терминальные последовательности ANSI.
#233 #561906
>>561904
ШТО? Я не хочу ебаться с асмом. Ксорг как-то получает координаты, правильно? Как его наебать и запроцессить отображение курсора самому?
#234 #561910
>>561906
Это надо printf-у скормить.
#235 #561939
>>561870

Ncurses
#236 #561940
>>561906
Я думаю, тебе надо свой драйвер написать evdev
#237 #562237
Господа, весьма глупый вопрос, но не смог найти ответа в интернете:
У меня есть некий класс, в котором есть поле std::auto_ptr<int> smart_ptr и в дефолтном конструкторе я пишу
smart_ptr = std::auto_ptr<int>(new int(5));
Допустим, у меня выбрасывает bad_alloc. Что происходит после этого? Могу ли я достучаться smart_ptr.get() и получить какой-нибудь 0, символизирующий неудачную аллокацию или я получу исключение, связанное с нарушением прав доступа при чтении по адресу?
9 Кб, 289x483
#238 #562247
Поясните, почему программа по выводу элементов массива не работает.
Да, мне нужно сделать это именно через вектор.
#240 #562257
>>562253
Ну так в чём моя ошибка?
#241 #562259
>>562257
В ДНК
#242 #562261
>>562257
Сделай дебаг и обрати внимание на циклы.
#243 #562262
>>562261

>дебаг


Я хз как это использовать.
#244 #562264
>>562262
Так погугли
2 Кб, 437x74
#245 #562266
>>562264
Так программа то запускается, но показывает хуйню.
#246 #562281
>>562266
Так ты же дебаг не сделал. Честно, ты просто хуесос ленивый, у тебя вопросов по существу нет.
#247 #562286
>>562281
Удваиваю.
#248 #562294
>>562281
Поясни как его делать, я совсем ньюфаг.
#250 #562307
>>562301
Все-равно нихуя не работает. Пилю в codeblocks.
#251 #562309
>>562307

Слева от зеленой полосочки жмякни лкм , появится красненький кружочек и жмакай ф5. Ну ёб твою мать.
#252 #562317
>>562294
Слева есть серая полоска, при клике на нее ставится брейкпоинт. Ставишь брейкпоинты, запускаешь дебаг (из меню run вроде), далее смотришь значения твоих переменных в каждой строчке и смотришь, нет ли ничего странного.
#253 #562325
>>562309
Все-равно нихуя не выходит.
#254 #562329
>>562325
Потому что вместо дебаггера запускаешь простой запуск.
#255 #562336
>>562329
Наставил точек, дебаггер не хочет запускаться.
#256 #562337
Вообщем у нас есть предмет(всего 1 семестр) где мы на c++ программируем, никому из группы это не надо, поэтому все лабы были благополучно скатаны с инета, но проблема в том, что отчет нужно делать с блок-схемой, которые умеют делать пара человеккоторые ходили и на пары, а не только на лабы, лол

Вообщем нужна софтина, в которую код вставляешь, а она блок-схему рисует

Подскажите быдлу пожалуйста
#257 #562345
Что можно почитать перед собеседованием на тему
опыт разработки сетевых приложений (сокеты)
Разработка под линукс
Ну кроме очевидных низкоуровневых соккетов, неужели в прикладных приложениях все с ними ебутся?
#258 #562349
>>562345
boost::asio, libevent
#259 #562364
>>562247
Бамп. Поясните, в чем проблема. Что-то надо в коде поменять или что?
#260 #562380
>>562345
Адекваты в большинстве сетевых приложений RPC используют, а не сокеты.
#261 #562381
>>562364
А что не так-то? Какой ожидаемый результат?
#262 #562383
>>562381
>>562266-вот такая хуйня вылазит при запуске
#263 #562384
>>562364
Проблема в том, что помимо написания кода, нужно научиться его отлаживать. Хотя бы отладочной печатью. Ты это делать не хочешь, а хочешь быстренько сделать лабу и пойти двачевать.
#264 #562386
>>562237
Если ты делаешь это в теле, а не через список инициализации, то к моменту начала выполнения конструктора smart_ptr уже будет создан дефолтным конструктором auto_ptr, который пихает в него nullptr. Так что да, если ты поймаешь свое исключение в конструкторе, то по get сможешь получить нулевой указатель, а вот если исключение пройдет наверх, то конструктор твоего класса недовыполнится, и объект не будет считаться созданным (для smart_ptr при выходе исключения за пределы конструктора вызовется деструктор, и больше он не будет доступен).

Алсо, auto_ptr уже давно deprecated, используй unique_ptr или shared_ptr.
#265 #562389
>>562384
Да бля, вчера препод на паре этот код показывал, у него он работал, хочу разобраться просто, почему у меня нет. Воспроизвел вроде в точности как было. А отладке нас даже не учили пока.
#266 #562392
>>562336

Правильно ли я понял, что лучше тогда не использовать инициализацию полей через список в принципе?

Знаю, но фирма, в которую я мылюсь устроиться, всё еще юзает auto_ptr.
#267 #562393
>>562392
>>562386
Проебался с обращением немного.
#268 #562396
>>562389

Или препод хуесос(что в универах не редкость), или ты невнимательный. В любом случае, дебаг надо освоить. Я более чем уверен, что за него вам никто и слова не скажет. Мне не говорили в моём говновузе так точно.
#269 #562398
>>562396
Блядь, нашёл таки и убрал лишнюю точку с запятой без дебага. Неужели нельзя было сразу на неё указать?
#270 #562399
>>562392
Наоборот жи. Ну не выделилась у тебя память, и хуле ты будешь делать? Зачем тебе объект, который конструируется по дефолту по с выделенной памятью, то с nullptr? Это же сразу дополнительные проекты надо хуярить, а так будет гарантия - если исключение не выбросилось, то все выделилось, и объект годный.
#271 #562402
>>562398
Ты получил рыбу, дурачок, а удочку не хочешь юзать. В следующий раз голодным останешься.
#272 #562404
>>562398

Однажды наступив на эти грабли и вдоволь поебавшись, ты запомнишь эту ошибку. Жаль, ты так и не освоил дебаг и не увидел, что в первом for у тебя нихуя не происходит. Так бы ты не ныл и не шел из-за хуйни сюда.
#273 #562405
>>562399
Не проекты, а проверки, блджад я не ебу, почему мои пальцы набили "проекты".
#274 #562407
>>562404
А смысл осваивать ради такой мелкой хуйни? Может потом ещё в ВУЗе будем изучать?
#275 #562410
>>562405

Я за геттер беспокоюсь для этого поля. Если я не ошибаюсь, то проверка if(!smart_ptr.get()) нихуя не даст, ибо он ссылается на мусор, а не на nullptr. Или я говна поел? Я бы просто всё сам проверил, но ручной throw bad_alloc'a не моделирует реальную ситуацию или я сделал что-то не так
#276 #562415
>>562407
Если у тебя не связана с этим специальность(спрашивается, нахуя тогда давать с++, а не паскаль), то смысла немного. А так это тебе поможет сэкономить время и в конце концов ты начнешь думать сам
#277 #562416
>>562410
Где у тебя проверка-то, сразу после выделения пкмяти? Тогда она на хуй не нужна, если new выбросит исключение, то до нее управление не дойдет просто, оно сразу перейдет в catch-блок. У меня смутное подозрение, что ты не оче хорошо представляешь, как исключения работают.
#278 #562418
>>562416

Нет, в методе getsmartptr(), геттер этого поля . Но я походу чото не так понял, ты прав.
#279 #562423
>>562410

Я пытаюсь добиться того, что если в случае не выделения памяти для моего auto_ptr, я с помощью геттера не кинул ссылку на мусор, а вернул какой-нибудь 0.
#280 #562424
>>562416
>>562423

Блядь, опять меня косит.
#281 #562460
>>562423
Если память не выделилась, то конструктор не выполнится и объект не создастся. И ты не сможешь вызвать его геттер, ну очевидно же. Забей, короче говоря, все нормально.
231 Кб, 1000x1333
#282 #562738
>>559303 (OP)
Ребят, нужно вывести функцию Эйлера от входного значения. Моя задача не укладывается в 2 секунды, может быть кто-то может помочь ускорить ее? http://pastebin.ru/3KManAiT
#283 #562744
>>562738
Ну можешь заменить i*i <= n на i < sqrt(n) но это не даст заметного ускорения.
#284 #562745
>>562738
while (n%i == 0){
k++;
n/=i;
} - это случайно не называется логарифм?
#285 #562831
>>562407
Эта мелкая хуйня встречается в любом языке, где есть фигурные скобочки. Т.е. в подавляющем большинстве языков.
#286 #562832
>>562744
Во долбоёб, а. Ну откуда вы лезете, блядь.
#287 #562844
>>562738
Не знаю, где бутылочное горлышко твоей задачи в целом, но вижу как минимум два проблемных места. Первое — и это обсуждалось уже раз десять — замени все i++ на ++i и k++ на ++k (на миллиарде операций выиграется порядка секунды). Потому что тебе нужен преинкремент (мгновенный инкремент), а не постинкремент (инкремент после обращения к переменной — это нужно например когда обращаешься в массив по индексу, а потом хочешь хочешь увеличить индекс на единицу).

Второе проблемное место уже позволит выиграть существенно больше.

>for (int i = 2; i * i < n + 1; i++)



Попробуй заменить на:

>for (int i = 2, square = 4; square <= n; square += i, square += ++i)



Т.е. я:
а) убрал лишнюю операцию прибавления единицы в каждой итерации за счёт нестрогого неравенства (небольшой выигрыш, сравнимый с ++i vs i++)
б) использовал формулу (i + 1)^2 = i^2 + 2i + 1 , представив 2i + 1 = i + (i + 1) .

Добавлена ещё одна переменная и два её инкремента, но я полагаю, для больших чисел выигрыш будет неслабый. В связи с чем у меня к тебе встречная просьба: проведи измерения и сообщи, насколько вообще это улучшило тебе производительность (было / стало). Самому интересно, т.к. у меня абсолютно ТАКОЙ ЖЕ цикл for в одной задаче, но измерять мне лень, а тебе по-любому надо.
#288 #562859
>>562844
Нет никакой разницы, вообще никакой между пост-инкрементом и пре-инкрементом, когда результат операции не используется.
#289 #562931
Есть быдлокод http://pastebin.com/6Nuse4rN
И есть задача
http://www.cyberforum.ru/cpp-beginners/thread1557305.html

Помогите сделать так, чтобы если 2 одинаковые строчки, то выводило только одну, помогите добавить эту проверку

Кто поможет в ближайший час - 100р на мобилку
#290 #562960
В вузике проходим работу с текстом. Учимся по древней методичке, завязанной на С. Но все пишут на крестах. В ней для работы с текстом используют char и ебаные древние функции. Так вот, есть ли в С++ более удобные средства для текстовых задач?
#291 #562965
Аноны, делаю "Камень ножницы бумага" в винформах.
Как в проект добавить несколько форм и заставить их работать?
Нужно 3 формы - 1 отправляет на 2, 2 на 3 и 3 на 1.
1 - Ввод ника
2 - Игра
3 - Вывод победителя и предложение продолжить игру

Или может быть есть возможность реализовать это в одной форме?
#292 #562976
>>559303 (OP)
подскажите плиз, как восстановить исходное положение элементов в стеке? то есть чтобы они выводились таким же образом, как и вводились(то есть если я ввожу 12345, то и выводилось у меня 12345)?
#293 #562981
>>561779
Блин, не могу найти где скачать. И она только на ангельском?
#294 #562992
>>562859
Ты можешь это обосновать?
#295 #562993
>>562976
Взять второй стэк.
#297 #563010
>>562976
Использовать очередь.
233 Кб, 398x500
#298 #563072
Что нужно иметь на гитхабе чтобы устроиться c++ джуном?
>c++
>джун
#299 #563074
>>563072
Пиши one-header либы. Только не слишком велосипедные. И пиарь их на SO потом.
15 Кб, 250x220
#300 #563075
>>563074

>И пиарь их на SO потом.


Это как? Типа создаешь вопрос, но на самом деле это ссылка ведущая на гитхаб?
17 Кб, 1173x347
#301 #563077
>>559303 (OP)
аноны, помогите
в чём там дело? если я пишу &stack::push, выдаёт ещё больше ошибок
http://pastebin.com/AhUUrMmu
#302 #563083
>>563075
Не, ну, например, ты написал либу для автоматической дрочки. Ищешь ньюфага, который спрашивает, как ему запилить автоматическую дрочку, и расписываешь за преимущества твоей либы. Потом этот вопрос начнет гуглиться, если тебе повезет, и дохуя народу ее скачают.
#303 #563086
>>563077
push () пиши, это тебе не хаскелл.
26 Кб, 400x300
#304 #563089
>>563083
Хитро придумал, антоша. Как теперь побороть страх выкладывать код?
57 Кб, 1218x613
#305 #563090
>>559303 (OP)
помогите пожалуйста, пишу класс, в нём есть динамический массив, вызываю функцию void без аргументов, в которой ввожу символ, и хочу этот символ вставить в динамический массив, и у меня выбивает ошибку. Что не так с моим кодом?
#306 #563092
>>563077
Мне вот интересно, как вы доходите до стеков, не умея вызывать функции?
#307 #563094
>>563089
Делай предварительные ревью у знающих посонов или у анона, очевидно же.
>>563092
Они просто начинают со стека, это же модно.
#308 #563095
>>563090
Конструктор покажи.
#310 #563149
>>563090
ну помогите пожалуйста
#311 #563153
анонимная ребзятина, прошу асистенс с вашей стороны

требуется мне HANDLE консоли взять, но к моему сосажелению, при подключении библиотеки ШИНДОВС.h вижстуд начинает ругаться на typedef при объявлении класса >переопределение; typedef нельзя перегрузить другим символом

нужно как-то енто обходить или решать?
памаги pr
#312 #563156
>>563153
лол решил, удивительно, что мой объект с ебанутым названием оказался в шиносовско библиотеке
#313 #563158
>>563121
В строке 12 ты создаешь массив 0 размера. Используй new char[size], где size - максимальное количество элементов.
#314 #563160
>>563156
смотри, как легко решаются проблемы на дваче
#315 #563162
>>563149
Ты пытаешься выделить 0 элементов и в итоге у тебя нулевой указатель, от того и рантайм ошибка
new char[10] к примеру юзай, или сколько там тебе нужно элементов
а вообще иди книги читай, а не гайды на ютубе смотри
#316 #563221
>>562960
std::string + std::regex.
Ну или QString.
Ну или CString, если извращенец.

А вообще, на твоей стадии обучения стоит написать свой класс строки.
#317 #563309
>>563221

>А вообще, на твоей стадии обучения стоит написать свой класс строки.


Всегда проигрывал с индивидов с таковыми суждениями. Вас или из 19-го века завезли, или ты уже успел забыть, как сам учился.

Ну ладно, скажи хоть, какими средствами ему реаллокацию массива делать.
115 Кб, 718x536
#318 #563464
Помогите школяру решить задачку. Я вам конфеток дам.
#319 #563473
>>563464
Для зайца считаешь растояние Чебышева до клада, для волка - манхетенское. Если у волка меньше он победил. Если волк не победил то победил заяц.
#320 #563476
>>563473
Что?
#321 #563477
>>563473
А как эти расстояния вычислить?
#323 #563604
>>563092
Это вроде особенность автодополнения кода в студии, она имя функции после точки предлагает, а скобки нет.
#324 #563616
Правильно ли я понимаю, что при std::move перемещается не сам объект, а указатель на него? Т.е. для экономии на больших объектах, перемещение которых накладно, так?
#325 #563769
>>563616
Нет, это всего лишь означает, что вызовется конструктор перемещения вместо конструктора копирования. Если ты в своем классе хранишь указатели и написал конструктор перемещения, чтобы он просто их перенес без глубокого копирования, то да. А если, например, у тебя в классе 100 интов без указателей, то в любом случае придется их копировать, перемещение не даст никакого выигрыша.
#326 #563772
Сделал что-то типа Хеллоу Воролда, но нужно, чтоб после закрытия первой консоли открывалась следующая и т.д. Не подскажите как? А то я совсем нафаня.
#327 #563782
>>563772
fork/exec, например.
#328 #563884
Плюсачи, кто из вас юзал бюилдер в в Sublime text? Как сделать так чтоб когда компилился фаил к нему привязывались нужные библиотеки, дабы можно было спокойно открывать на другом компухтере..
sage #329 #563889
Плюсачи, Кто из вас имеет дело с бюилдером в Sublime text? Как заставить эту заразу привязывать библиотеки к файлу, чтоб можно было спокойно открыть на другом компьютере.. Через консольку для MinGW знаю что прописывается в конце два флага -static-libgcc -static-libstdc++
sage #330 #563891
>>563884
>>563889
Пардон за повторение
Черт, сажа приклеилась...
#331 #563892
>>563891
Я у мамі слегка жопорук, опять сажа...
80 Кб, 1161x613
65 Кб, 856x701
#332 #563925
>>559303 (OP)
Ананасы, помогите разобраться с dllками. Допустим я в dllке создал ресурс с диалогом, и процедуру для него. Как мне запустить все это дело в программе? Шляпа которую я написал не работает.
#333 #563946
Всем привет, я вернулся с лоботомии. Она мне не помогла. В связи с чем имею вопрос: а зачем нужны умные указатели, если не для массивов в куче?
#334 #563948
>>563946
Можно еще предотвратить утечку памяти. Например shared_ptr освобождает память если на нее не указывает ни один указатель.
#335 #563954
>>563946
Для массивов в куче есть vector
18 Кб, 373x344
#337 #563990
Вопрос от ньюфани, для чего нужны типы char16_t и char32_t, если вот wchar_t ещё понятно что он он нужен если мне надо закодировать ну например кирилицу, то зачем нужны они?
#338 #563999
>>563946
В самом общем случае - для гибкого управления временем жизни объекта. Чтобы он не удалялся при выходе за пределы скоупа, как на стеке, а можно было передавать владение объектом между разными функциями и другими объектами. Куча не обязательно используется, кастомные делетеры позволяют хранить в них файловые дескрипторы, сетевые соединения, да что угодно вообще.
#339 #564003
>>563990
Чтобы гарантировать фиксированный размер числа. Для обычных типов гарантии стандарта очень скудные, строгое требование только char = байт.
#340 #564027
>>563955
Во, вот это наглядно, спасибо.

>>563999
И тебе спасибо.
#341 #564028
>>564003
Это понятно. Он (или уже даже скорее я) спрашивает, нахера нужны чары char16_t и char32_t, когда есть int16_t/uint16_t и int32_t/uint32_t .
#342 #564038
>>563769
Нахуй оно тогда вообще нужно?
#343 #564067
>>564028
Потому что есть юникод. А там и 16 и 32 битное кодирование.
#344 #564069
>>563955
А new кинет bad_alloc?
#345 #564072
>>564038
Ответил какой-то мудак.
move позволяет "сменить имя" объекта, без реального копирования.
b = move(a) означает, что теперь b указывает на память, которую раньше адресовал a. а теперь "смотрит" в никуда, но можно что-нибудь присвоить.
#346 #564073
>>564072
Ты не прав. Конструктор перемещения и отформатировать диск может.
#347 #564074
>>564072
А нахуй оно нужно, если есть ссылки?
#348 #564080
>>564074
У ссылки нельзя менять владельца.
#349 #564083
>>564073
Не дефолтный конструктор перемещения или присваивания может хоть мамку ебать, но нарушать семантику не надо
#351 #564089
>>564028
А вот это хуй знает, если честно. До кучи, наверное, я ими не пользовался ни разу.
#352 #564091
>>564072
Это бред. Ты явно с жабой попутал, лол. Открой стандарт уже, там черным по белому написано. Или вот, например: http://en.cppreference.com/w/cpp/language/move_constructor

>Move constructors typically "steal" the resources held by the argument (e.g. pointers to dynamically-allocated objects, file descriptors, TCP sockets, I/O streams, running threads, etc)


Речь идет о членах и родителях объекта, а не самом объекте.
#353 #564124
>>564091
Жопочтец в треде.
#354 #564128
Поогите нюфане, ебущимуся с алгоритмякой. При попытке отладки трассировки visual studio кидает меня из моего кода в стандартные библиотеки, чтт пиздец неудобно. Как исправить это?
#355 #564139
>>564067
А, ну логично. И тогда \n вне линуксов снова будет превращаться в \r или \r\n при закатывании чаров в файл или ещё куда.
#356 #564166
>>564128
не заходить в функции из стандартных библиотек? (step over F10)
#357 #564229
Хеллоу двощ.
Что делать, если я первокур-препод информатики, который задался идеей стать хорошим программистом? По нашей программе полтора года идет С++. Я до него абсолютно нихуя не кодил, проходим просты команды, такие же как в С. Мне стоит продолжать учить кресты?
Университетская программа идет по Шмидту (2010). Тут написано, что он устарел, а наш препод менять ничего не собирается. Плюс я не силен в математике и программировании, а С++ судя по написанному первым языком хуево идет.
Мне продолжать или нет? Может начать другой язык?
1971 Кб, Webm
3058 Кб, Webm
5874 Кб, Webm
#358 #564232
>>564229
Цуиь для привлечения внимания.
#359 #564244
>>564229

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

Будет сложно, но вообще учить самому кресты возможно. Просто надо читать книги, пилить что-то своё и спрашивать совета у знающих людей желательно не здесь. Нужен взгляд старшего, который тебе укажет на ошибки и расскажет о тонкостях, которые упускаются в книгах. По поводу литературы не берусь что-то рассказывать, ибо базовый уровень я получил на курсах у алкаша-инженера, который писал на крестах лет 15. Но знающие люди вот тут что-то говорят: https://toster.ru/q/37321 . Погугли на ресурсах типа тостера или stackoverflow, там обычно адекватные люди отвечают.

Идеально будет, если в твоём городе есть какие-то курсы по С++ при компаниях в моём зажопенске есть такие. Обычно они бесплатны, ведь компании заинтересованы в дешевой и более-менее знающей предмет раб. силе. Но там надо иметь какие-то базовые знания, всех подряд не берут.
#360 #564247
>>564244
А вообще есть смысл начинать с С++?
#361 #564248
>>564247

Не берусь тебе ответить на этот вопрос, так как я студентота, знающая 2 языка(1+0.5+0.5) + я начал с крестов сам(говнопаскаль на полсеместра не в счет). Все советуют python как первый язык для обучения, мол, он дружелюбен и при этом используется для реальных задач. На Западе в универах вроде так и делают. Погугли на этот счет, чтоб я тебе не спиздел. Я с ним лично не знаком.
#362 #564249
>>564248
У нас полтора года кресты, потом паскаль и питон. Тут вообще ruby+python советуют.
Вообще мне нужны в основном фундаментальные знания, реальные вещи за деньги я нескоро планирую писать, поэтому хочу что-то, что мне зачтется через 3+ года.
#363 #564259
>>564249

Я на ruby писал месяц, так как думал на нём сделать кое-что для университета. Крайне не советую, так как после него перейти на другие языки программирования будет намного сложнее. Он слишком упрощен и даёт плохие знания как первый язык программирования.

Хочешь универсальности и потом в случае чего перейти без относительно серьёзных проблем на любой язык — бери С++. Но будет сложно, повторюсь. Вот сейчас погуглил и нашел очередную туеву кучу вбросов типа "язык Python занимает лидирующие позиции в качестве первого языка программирования во многих американских колледжах." Смотри сам, брат. Советую зайти в Python-тред или просто погуглить стори людей, которые учили Python как первый язык. Потому что мне про него нечего сказать.

TL;DR: выбирай между Python или С++, для это хорошенько погугли и поспрашивай РАЗНЫХ людей(100 мнений одних крестофагов не дадут тебе полной картины).
#364 #564261
>>564249

Алсо бесполезный паскаль, основная цель которого была обучать и давать азы, идущий после крестов — это пушка.
#365 #564320
>>564247
Про это даже в шапке написано, ну.
#366 #564325
>>564261
Возможно, такая логика: дать нормально покодить лаба1 на крестах, с конпелятором освоиться, а потом уже переходить к CS, в которой псевдокод поскакалеобразный.
#367 #564326
котоны, помогите, как по-английски будет добивание в хоккее?
нужно сообщение коммита написать в стиле: исправили ошибку трушно по энхаэловски - бросок - добиние - гол,
т.е. fixed bug in a true NHL way - shot, tipping in - SCORE!!!

НО, tipping in - это подправление, насколько понял, а нужно именно добивание.
В словарях не могу найти правильный перевод.

!с меня кусок труъшного коммерческого кода!
#368 #564330
>>564232
Кто посередине?
#369 #564350
Поцоны, а Qt это кошерно?
#370 #564376
#371 #564377
>>564376
Но ведь он упрощает разработку в десятки раз. Откуда тогда неосиляторам взяться?
#372 #564388
>>564377
Так можно про любой фреймворк сказать. На деле он просто позволяет воспользоваться существующей кодобазой, вместо пейсания своих лисапедов. Ньюфаги всё равно не осилят всех этих mvc и наследований-хуеследований и асинхронных по умолчанию хуиток.
#373 #564480
>>564326

> !с меня кусок труъшного коммерческого кода!


никому твой легаси-круд на хуй не сдался
#374 #564505
>>564350
Как для c++99 - норм. Для C++11 - устарел по своей кошерности.
#375 #564547
>>564505
Ой бляядь. Ну ты сука нарвался. Иди сюда, я тебя выебу.
По кошерности устареть может разве что твоя мамаша.
//мимокутеюзер
#376 #564550
>>564350

Диалект крестов. Просто куча готовых решений, которыми ты можешь воспользоваться, если тебе таковые нужны. Начинать учить с него кресты не оч, но вообще why not.
#377 #564563
>>564547
Но ведь он прав. Всякие смарт поинтеры, хуёинтеры. Qt лучше только окошкоделаньем и всё.
#378 #564582
Ребяты, как удалить статически созданный объект?
#379 #564585
>>564563
С таким же успехом можно заявить что и буст уже устарел и нахуй не нужен после c++14, потому что в стандартную библиотеку из него добавили async и future.
У Qt внезапно очень обширная область применения, и всякие смартпоинтеры просто сахарок.
#380 #564589
>>564582

Зачем? Он удалится по выходу из зоны видимости.
#381 #564592
>>564582
У тебя ошибка проектирования.
#382 #564593
>>564585
Но ведь буст и правда устарел...
#383 #564594
>>564589
>>564592
В методичке по лабе написанно "УДАЛИТЬ СТАТИЧЕСКИЙ СОЗДАННЫЙ ОБЪЕКТ"
Фикс #384 #564595
>>564594
Статически
#385 #564596
25 Кб, 722x287
6 Кб, 484x344
#386 #564613
Аноны, есть вопрос. Я тот долбоёб, что несколько тредов назад ебался с eclipse, kdevelop, code::blocks. Всё-таки я разобрался с kdevelop: понял, как нормально подключить 11 стандарт, как сделать запуск в консоли. И всё шло хорошо, пока я не столкнулся с один странным моментом. Вот проблемный код (абсолютно рабочий) в kdevelop:
[code]#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
for (int i = 0; i < 200; i++)
cout << setw(42) << i << endl;
cout << "*";
return 0;
}[/code]
Код абсолютно правильный. Проблема заключается в странном поведении gnome-terminal. Он просто обрывает вывод и при этом пишет, что процесс завершён с кодом 0. Для эксперимента я сделал две конфигурации запуска. В одну прописал «gnome-terminal -e %exe», а во вторую «xterm -hold -e %exe». Если запуск идёт через гном-терминал, то вывод просто обрывается (пик. 1), если через xterm, то вывод происходит до конца (пик. 2). Хотя если запускаю гном-терминал, а уже из него вызываю приложение, то всё нормально. Что за странное поведение? Это баг?
#387 #564614
>>564613
for (int i = 0; i < 190; i++)
быстрофикс
#388 #564615
>>564613
Забыл добавить, что вывод происходит нормально, если убрать setw(42). Каким образом он влияет на gnome-terminal, что он не выводит до конца?
#389 #564620
>>564615
Причём чем больше я ставлю setw, тем меньше цифр выводится. Хотя иногда почему-то всё выводится до конца, но это редко.
#390 #564630
>>564613
Это ты так учишься программировать? Найс прокрастинация
#391 #564631
>>564613
У тебя другой код на пике. Раз не показываешь нормальный код, то либо иди нахуй, либо открывай gdb и иди нахуй.
#392 #564634
>>564630
Да мне это неважно, ибо я могу работать и без setw(), но такое странное поведение меня сбило столку. Хочется разобраться.

>>564631

>У тебя другой код на пике.


Абсолютно тот же самый. Просто я cout разбил на три строки, чтобы удобно было комментировать setw(). Ну и скрипт немного неправильно отобразил последний cout. В общем, специально для тебя:
[code]#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
for (int i = 0; i < 200; i++)
cout
<< setw(42)
<< i << endl;
cout << "!!!";
return 0;
}[/code]
Конфигурация запуска:
[code]«gnome-terminal -e %exe»[/code]
Если у тебя стоит kdevelop, попробуй воспроизвести.
#393 #564635
>>564634
Блин, опять 200 написал. Там 190.
#394 #564636
Сап, я пилю в подарок другу небольшую текстовую адвенчуру через консоль. После определённого ивента нужно сделать три выбора дальнейшего развития сюжета. Собственно, каким образом это кодить, не подскажите? Нужно чтоб после каждого выбора стартовала отдельная ветка сюжета. Буду безмерно благодарен за помощь или какой-нибудь гайд.
#395 #564642
>>564636
Как ты собрался писать консольку если основ условного перехода не знаешь,лол?
Конструкция if else if else
Либо switch-ем
cin >>choice;
switch (choice)
{
case 1:
Всякие операторы;
break;
case 2:
Всякие операторы;
break;
и т.д
#396 #564644
А я сюда пришёл с вопросом по с++11 не пойму как строку удалить и очистить,почему метод str.clear() не очищает?
#397 #564645
>>564642
Я на самоподдуве этим решил заниматься. За помощь спасибо. А можно, к примеру, в case 1 засунуть ещё один свитч, чтоб после событий в нём предлагался ещё один выбор?
#398 #564649
>>564645
Используй гото.
#399 #564651
>>564585
Ну не знаю, возможно, что это одна из граней неосиляторства, но мне QT не понравился совершенно. Какой-то он, эээ, не тяжелый даже - громоздкий. И если еблю с его прикручиванием еще можно простить, то от разницы с крестовой идеологией никуда не деться. Впечатление такое, как будто какой-то ебучий чужой надел на себя крестовый синтаксис, а внутри какие-то совершенно монструозные вещи творятся, избыточные и нихуя не оптимальные.
#400 #564654
>>564649
У меня уже получилось напихать в первый чойс ещё один свитч, но спасибо за инфу, возьму на заметку.
#401 #564660
>>564585

>устарел


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

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

Чтобы решить проблему, ты покупаешь лодку и начинаешь плавать к тянке на ней. У лодки есть свои проблемы, но в целом ты решаешь задачу проще, чем используя мост, и доволен.

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

Теперь платиновые вопросы:
1. Всрется ли кому-нибудь платный проезд по понтонам, когда нормальный мост таки героически будет достроен?
2. Что будет, если 50-тонный танк решит заюзать понтонный мост, который рассчитан только на 30 тонн?
3. Что будет, если через реку, перегороженную понтонным мостом, внезапно понадобится пройти кораблю?

Старый мост - стандартные средства крестов, лодки - отдельные либы, не нарущающие крестовую идеологию. Понтонный мост - QT, который может дать преимущества, но чрезмерно отдаляется от концепции обычного моста, и в результате возникают проблемы (допустимый вес, проход кораблей), которые с обычным мостом отсутствуют в принципе. При использовании понтонного моста ты платишь за проезд - накладные расходы на использование QT. По мере допиливания старого моста-стандартной библиотеки, куски QT становятся не нужны (указатели и треды уже, ну ты понел).
#402 #564676
>>564634
Ну так что, удалось кому-нибудь хотя бы повторить этот баг?
#403 #564678
Что можно придумать на крестах для резюме на гитхабе?
#404 #564700
>>564678
Операционную систему.
#405 #564701
>>564700
На крестах?
#406 #564719
>>564635
Блядь, да напиши уже один, ровно один код на ideone.com , который ты запускаешь и там, и там. И дай сюда ссылку. Только убедись перед этим, что в обоих случаях действительно один и тот же код запускаешь.
#407 #564779
Не использую cin/cout (поэтому нет #include <iostream>, который включает <ios>), использую чтение/запись файлов.

#include fstream
...
std::streamsize ss = 7;
fs.write(char_array, ss);

Стоит дополнительно подключить <ios> для std::streamsize или он включён в <fstream>? Не могу нагуглить.
#408 #564914
>>564719
https://ideone.com/IhmbU9
Вот код, но проблема явно не в нём.
Запускаю через KDevelop. Конфигурации запуска:
1. Для гном-терминала:
[code]gnome-terminal -e %exe[/code]
2. Для xterm:
[code]xterm -hold -e %exe[/code]
Gnome-terminal обрывает вывод на 184, но если убрать setw(42), то всё нормально. Если просто запустить терминал, а уже из него вызвать программу, то опять-таки всё нормально выводится. Почему такое странное поведение у гном-терминала? Попробуйте хотя бы повторить такое поведение.
#409 #564918
>>564779
У меня в <fstream> подключаются <istream> и <ostream>, а в каждом из них уже есть #include <ios>. Можешь не подключать.
#410 #564930
>>564630
Это ты еще меня не видел, лол.
#411 #564983
>>564644
ты код, блять, покажи.
нам тут через хрустальный шар гадать что-ли, что ты там наговнокодил?
#412 #565124
на ideone можно загрузить два исходника main.cpp и name.h ?
Эти два файла как одна прога.
#413 #565137
В тхрэд призываются гуру, которые пояснят мне конечно-же за ебаное нихуа как передать в функцию массив ссылок на функции.
#414 #565140
>>565137
Прототипы функций одинаковые?
#415 #565150
#417 #565159
>>565137

> массив ссылок


Так нельзя.
#418 #565161
>>565153
ай шайтан, но я даун, не нашел тхреда по С чистенький, который и написал сюда((( Как-бы его перевести на С
#419 #565162
>>565159
лолчто?
а а - тогда что?
#420 #565165
>>565162
[code] a [/code]
#421 #565166
>>565165
ЗвёздачкаЗвёздачка а
#422 #565169
>>565166
Указатель на указатель. Неправильно задан сам вопрос. Можно передать массив указателей на функции. Массивы ссылок невозможно создать в принципе, потому что ссылка не выделяет ни какой памяти.
#423 #565174
>>565153
по-сути я его обьявляю так
[code]int(mas1[2])(StructName, unsigned) = { fun1,fun2};
\tint(mas2[3])(StructName, unsigned) = {fun3,fun4,fun5};[/code]
#424 #565179
>>565174
но как его передать?
#425 #565187
Есть одна структура Unit, описана в Unit.h
Есть другая структура, Tank, описана в Tank.h
В Tank.h так:

#include Unit.h

struct Unit; // error 2
...

struct Tank
{
...
int hp;
...
HpBonus(const Unit &unt)
{
...
hp += unt.hp; // error 1
...
}
}

error 1: invalid use of incomplete type ‘const Unit {aka const struct Unit}’

error 2: forward declaration of ‘const Unit {aka const struct Unit }’

Как нормально подключить свою структуру? (в других местах все нормально подключается по показанному принципу)
#425 #565187
Есть одна структура Unit, описана в Unit.h
Есть другая структура, Tank, описана в Tank.h
В Tank.h так:

#include Unit.h

struct Unit; // error 2
...

struct Tank
{
...
int hp;
...
HpBonus(const Unit &unt)
{
...
hp += unt.hp; // error 1
...
}
}

error 1: invalid use of incomplete type ‘const Unit {aka const struct Unit}’

error 2: forward declaration of ‘const Unit {aka const struct Unit }’

Как нормально подключить свою структуру? (в других местах все нормально подключается по показанному принципу)
91 Кб, 913x868
#426 #565189
>>565179
Вот так. Сделай typedef своего прототипа и передавай как обычную переменную.
#427 #565191
>>565189
не, ну ты реально классный
#428 #565193
>>565169

>Не выделяет никакой памяти



void foo() {
char * ptr = "cool story, bro!"
}

Напомни мне, когда это стек перестал быть памятью?
#429 #565195
>>565193
При чем тут стек? Где ты тут увидел ссылку?
>>565191
Ну есть немного.
#430 #565200
>>565195

>При чем тут стек?


Где находится char * ptr?

>Где ты тут увидел ссылку?


Ссылка = указатель
#431 #565201
>>565200

>Ссылка = указатель


лолнет)
#432 #565202
>>564330
Stoya.
#433 #565203
>>565200

>Ссылка = указатель


А, вот как, так с этого бы и начинал. Пиздуй читать книжки из шапки.
#434 #565204
>>565200
*а - указатель
&a -ссылка
#435 #565205
>>565203

>Пиздуй читать книжки из шапки.


Ну лан(
#436 #565216
какие годные крестовые кросплатформенные сетевые либы можно было бы заюзать так, чтобы создал новый инстанс класса и вот у тебя уже всё работает и ничего не надо?
#437 #565221
Анон, как вычислить определенный интеграл на плюсах?
#438 #565225
>>565216
boost
>>565221
Берешь и вычисляешь без задней мысли.
#439 #565227
>>565225
Вот чет нихуя в голову не приходит.
#440 #565231
>>565221
Знаешь, как ленивые хуи в СССР сдавали методы погромирования про численное решение диффуров? Решали диффур руками, а потом выводили ответ println.
#442 #565236
>>565231
java была во времена совка ???
#443 #565249
>>565236
writeln)))
#444 #565253
И все таки, как реализовать на плюсах решение через метод прямоугольников?
#445 #565256
>>565253
Сука, берешь формулы и подставляешь. Нухоть чуть мозгой пошевели.
#446 #565258
>>565256
Я бы мог пошевелить мозгой, если бы я знал вообще в какой области шевелить.
#447 #565260
>>565258
Ты не можешь вбить в поисковик: метод прямоугольников C++ ???
#448 #565261
>>565258
В области своего ануса.
#449 #565262
>>565260
Могу, но никто, сука, не комментирует код.
#450 #565263
>>565262
Блять, там от силы строчек 10.
Что там комментировать-то?
#451 #565264
>>559303 (OP)
Посоны, а писать на ++ под среду, которая на C, и ее C API - не зашквар? Примеры: Nginx, MySQL, PostgreSQL, да и вообще ВСЁ. Просто на ++ объективно проще пишется, ОО-декомпозиция и все такое. Написал интерпретатор для Nginx на плюсах, теперь все время думаю, может на С перевести?
#452 #565265
>>565263
У нас с тобой очень разные возможности в плюсах. Я начал учить их только.
#453 #565266
>>565265
Может лучше тогда интеграл решить вручную?
#454 #565268
>>565266
Вручную я его изи решу, но мне нужно написать цикл для его решения(да-да-да, это именно лабораторная)
#455 #565269
>>565265
Ну дык иди книги читай. Такие примеры в первых главах рассматривают, неуч )
#456 #565271
>>565268
Давай код, будем разбираться.
#457 #565272
>>565187
Бамп!
#458 #565273
#include <stdio.h>
#include <math.h>

double InFunction(double x) //Подынтегральная функция
{
return sin(x); //Например, sin(x)
}

double CalcIntegral(double a, double b, int n)
{
int i;
double result, h;

result = 0;

h = (b - a) / n; //Шаг сетки

for(i = 0; i < n; i++)
{
result += InFunction(a + h (i + 0.5)); //Вычисляем в средней точке и добавляем в сумму
}

result
= h;

return result;
}

int main(void)
{
double integral;

integral = CalcIntegral(0, 2, 500);
printf("The value of the integral is: %lf \n", integral);
return 0;
}

Ну вот, допустим, код на си с вики. Нихуя не могу понять как это все написано, ибо задание своих функций у меня еще в вузе не проходили, значит есть способ легче.
#458 #565273
#include <stdio.h>
#include <math.h>

double InFunction(double x) //Подынтегральная функция
{
return sin(x); //Например, sin(x)
}

double CalcIntegral(double a, double b, int n)
{
int i;
double result, h;

result = 0;

h = (b - a) / n; //Шаг сетки

for(i = 0; i < n; i++)
{
result += InFunction(a + h (i + 0.5)); //Вычисляем в средней точке и добавляем в сумму
}

result
= h;

return result;
}

int main(void)
{
double integral;

integral = CalcIntegral(0, 2, 500);
printf("The value of the integral is: %lf \n", integral);
return 0;
}

Ну вот, допустим, код на си с вики. Нихуя не могу понять как это все написано, ибо задание своих функций у меня еще в вузе не проходили, значит есть способ легче.
#459 #565274
#460 #565276
>>565273
Сюда не кидай, а то разметка пидарасит код.
35 Кб, 764x659
#461 #565281
>>565276
Хуй знает, а если скрином просто скину?
#462 #565287
>>565281

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


ШГ.

мимокрок
#463 #565289
А куда вам тогда код кидать?
#464 #565290
>>565281
Ну и что тут не ясно?
Одна математическая ебола.
#465 #565291
>>565290
Я нихуя не понимаю как она написана, ну блин.
#466 #565294
>>565291
Вызывается функция CalcIntegral

Ну а дальше в цикле вызывается основная функция интеграла.
#467 #565298
>>565294
Хм, ладно, сейчас попробую
33 летний неосилятор #468 #565305
снова я со своим ебучим методом clear(). Правильно ли я её использовал. Пытаюсь очистить строку.
http://ideone.com/tkZ4B3
#470 #565314
>>565305
Все так, хули.
#471 #565337
>>565187
Ну йобана!
#472 #565339
Вопрос: в чем разница между global и static scope?

В одном файле - видит. В нескольких файлах без include и extern - не видит. С ними - оба же работают. В чем разница?
#473 #565342
>>565339
а, так, глобальную можно в другом файле через external, а static - нет ибо фиг ли... static - он всегда расценивается как класс хранения, а не как область видимости? Запутался
#474 #565344
>>565342
причем так как include *.cpp нельзя, static переменный я не могу юзать вне? А если это переменная в .h файле вроде currentID в прототипе класса, то могу юзать во всех файлах, где делается include этого заголовочного файла? Так?
#475 #565347
>>565344
А, еще про начальные значения. auto переменные не получают начальных значений, их надо инициализировать явно. Но переменные в Global scope получают нулевые значения. Они не auto считаются или исключение такое?
#476 #565351
>>559303 (OP)
Ананас, почему исключения в io сделаны через жопу я тебя спрашивать не буду.
Спрошу только, как заставить std::copy человечней работать со стрим-итератором, чтобы оно не кидало исключений?
код: https://gist.github.com/x4t3a/350c42677e98684e12b2
Нужно, чтобы оно кидало исключение, если файл не возможно открыть, но оно его кидает из std::copy (сука1)
33 Кб, 755x900
33 летний неосилятор #477 #565357
>>565314
и что-то нетак.
>>565313
сделал как советовал этот господин и получилось что если cout-у передать имя строки,то он показывает пустоту. А если передать конкретно какой-то порядочный номер символа в строке то он показывает его...
типа символ конца строки ставит в первый элемент массива. Я это и проще мог сделать...
тут если поиграться с индексом можно понять. http://ideone.com/SEAMMi
#478 #565358
>>565357
Ну загляни в реализацию метода clear. Скорее всего, в целях оптимизации, никакого free и memset(0) там не делается. Я не понимаю, в чем у тебя проблема.
#479 #565367
>>565187
Посоны, ну помогите, а.
Почему при подключении хедера с описанием структуры я не могу пользоваться данными из нее?
#480 #565368
>>565357
Попробуй shrink_to_fit() вызывать после clear() но там нихуя не гарантируется (зависит от реализации).
#481 #565370
#482 #565371
>>565370
Для резюме?
#483 #565372
#484 #565373
ВОПРОС ПРО vector
Смотрите, сложность добавления и сложность обращения к элементам - O(1). Как у обычного массива. И кажется, что юзать его так-же эффективно, как и массив. Но он умеет динамически удлинняться.
Насколько я знаю, в тот момент, когда ты добавляешь элемент, а выделенной памяти не хватает - выделяется память в два раза больеш, чем была. А что становится с элементами?
Они копируются в новое место? Или это только новая память выделяется в новом месте?
Если первое, то значит сложность этой хуйни иногда O(n) получается. И не понятно, как её вообще считать в случае рассчета сложности какого-то алгоритма.
А если второе, то почему тогда обычные массивы вообще кто-то юзает?
#485 #565388
>>565373
В винде - хз, а в линухе меняются ссылки в таблицах файловой системы, так что все норм, не ссы.
#486 #565392
Спрошу тут про сложность алгоритмов.
Вот есть допустим алгоритм. У него сложность оценивается из двух одинаковых слагаемых n. Коэффициент убирается.
Остается O(n) вместо O(2n). Нахуя опускать коэффициент, если разница по времени будет В ПОЛОВИНУ. Пиздос просто.
#487 #565395
>>565392
Если растет линейно - похуй же, понимаешь? Даже у степеней опускают коэффициенты. Лишь бы не экспоненциально.
#488 #565398
>>565395
Ну, я про то и говорю. Всё это кукаретические штуки и совершенно не оценивают время.
#489 #565425
>>565398
А потом ещё спрашивают, зачем программисту математика. Вот смотри, есть у тебя алгоритм, который для 1 000 элементов массива отрабатывает за 1 миллисекунду. Тебе (пока ты не начал упираться в бутылочное горлышко) на самом деле всё равно, отрабатывает он за 1 или за 2 миллисекунды.

А теперь ставится вопрос, за сколько он отработает для 100 000 элементов. Если сложность линейная, то соответственно за 100 или 200 миллисекунд (забьём на маленькие оверхэды). А если сложность экспоненциальная, в самом простом случае удвоенная, то за 2^(100 000 / 1 000) * 1 мс == 1 267 650 600 228 229 401 496 703 205 376 мс, т.е. примерно за 10^30 с, что многократно превышает время жизни вселенной.

Так что в экспоненте этот коэффициент играет роль. Если ты собьёшь его с 2 до 1,2, например, можешь можешь сам увидеть, что это будет примерно за 10^8 с, т.е. 3 года. 3 года или практически в бесконечно большее число раз, чем существует вселенная? Ты вообще понимаешь логарифмический масштаб?

Коэффициентом перед линейным алгоритмом пускай Александреску занимается для конкретных алгоритмов. Но гораздо важнее понизить сложность того или иного алгоритма: а вот этим уже занимаются математики. И имеет значение коэффициент только в экспоненте, а в полиномах (линейное, квадратное и прочее) имеет значение лишь степень полинома, потому что гораздо быстрее ты упрёшься во время жизни вселенной, чем какой-то коэффициентик (пускай даже равный 100) заставит тебя лишнюю кружку кофе выпить.
#490 #565489
>>565367
если ты обьявил сруктуру в хэдере, зачем ты ее обьявляешь и в файле подключения
#491 #565506
>>565373
Добавление в вектор имеет амортизированную сложность О(1).
Если надо увеличить память, то сначала может быть выполнен realloc, а в случае неудачи calloc с копированием элементов. Такая операция амортизирована, памяти увеличивается в ~2.5 раза (коэффициент зависит от реализации).
К тому же, есть reserve(), который позволяет запросить некоторый размер заранее.
Удобство работы с вектором и амортизация работы с памятью намного лучше ручной работы с C-array.
#492 #565549
Анончики, уже два дня ищу способ на C++ получить список писем с gmail. Ни одной работающей библиотеки не смог найти. Нужно просто в консоль вывести список писем, или хотя бы их количество. Сталкивались с таким?
#493 #565556
>>565549
https://github.com/google/google-api-cpp-client/
Далее смотришь gmail-api.
#494 #565570
>>565425
>>565425
Я знаю как это работает, не нужно мне объяснять.

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


Разница может быть куда больше.
#495 #565571
>>565506

> амортизированную сложность О(1)


Ну, я как-бы написал это простыми словами.
#496 #565572
>>565570

>Я знаю как это работает, не нужно мне объяснять.


Ну а какого чёрта тогда спрашиваешь про коэффициент? Ты издеваешься или что?
#497 #565607
поясните зеленому, а для чего ваще нужно возвращать символ обратно в поток ввода?
#498 #565613
>>565607
Например ты парсишь поток ввода. Тебе нужно выбрать из потока какой-то терм и отдать его дальше. В зависимости от грамматики, термы могут не разделяться пробельными символами которые можно выбрасывать. Тоесть ты читаешь посимвольно из потока в буфер, тащишь новый символ - смотришь что он уже от другого терма и возвращаешь этот символ назад в поток, чтобы начать дальнейший разбор с него. Отправляешь то что в буфере куда нужно, и начинаешь читать с потока новый терм и все заебись. Можно обойтись без возвращения символов - или читать символ не вытаскивая его, а потом вытаскивать если нужно - но так больше действий, или сохранять вытащеный символ в отдельной переменной и разбор нового терма начинать с этой переменной - но так сложнее код.
#499 #565614
>>565607
Читаешь Страуструпа для ньюфагов? Тогда сам чуть позже поймёшь. Если не его, то, например, ты решил считать некую последовательность символов, которая обязательно начинается с определённого символа. Считываешь первый, он неверный, тогда кладёшь его на место и кидаешь исключение, причём получается, что ты как бы и не начинал считывать последовательность символов, т.е. её можно с нуля считать для обработки ошибки, например.
#500 #565698
>>564914
Бамп ебанутому вопросу. Может быть, у кого-нибудь всё-таки получится воспроизвести такое поведение.
#501 #565710
ОП, запиливай новый тред, но с правильной ссылкой на Вижуал Студию:

https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
#502 #565711
>>565710
Пусть ставит две ссылки.
#503 #565735
>>565549
гугли imap йопта
#504 #565836
>>565549

Насчет чистых крестов не знаю, но в Qt это относительно просто делается. Там куча стандартных классов для работы с JSON и http-запросами. Сам брал письма при помощи Gmail API.
10 Кб, 965x452
#505 #565882
Как посчитать сложность у такого выражения? Не могу оценить.
#506 #565886
>>565882
линейная
#507 #565888
>>565886
Ну и как ты посчитал? Прикинул просто, что делитель меньше делимого?
#508 #565889
>>565888
Делитель тут не при чем вообще. У тебя сумма от 1 до N. Что там внутри ничего не значит.
#509 #565891
>>565889
Ты не прав.
30 Кб, 640x748
#510 #565898
Хотел спросить у знающих анонов.
Каким образом вы вообще читаете материал/книгу, в котором(-ой) предусматриваются задания или упражнения. Я в принципе не отрицаю их пользы, но вот чего заметил, что они пиздецки тормозят скорость получения новой информации.
Сам я читаю сейчас Страуструпа для ньюфагов. Гуглил я ещё какую-то книжку на 1к страниц, не важно какую и пришел к выводу, что вся эта тягомотина растянется до НГ(т.е. упорный дроч заданий всех и теории).
Особенно когда в задании просят пойти в другой раздел, найти ф-цию, которую разбирали и прикрутить к ней то, что ты прочел минут 10 назад.
В итоге короче, что я думаю: читаешь задание -> минуту-две прокручиваешь в голове как её решаешь и приступаешь к новому. Если что-то становится непонятно - пишешь код.
#511 #565900
>>565898

>Страуструп


>для ньюфагов



Страуструп как книга для ввода в кресты — очень плохой выбор.
#512 #565901
>>565900
В плане того, что там все разжевано как для дибилов?
Может быть, но я уже на половине, поэтому дропать и брать новую книгу не вариант.
#513 #565902
>>565891
С чем не прав, поехавший? Прочитай для начала определение О-нотации.
http://aliev.me/runestone/AlgorithmAnalysis/BigONotation.html
#514 #565904
>>565901
Задания нужны для того, чтобы закрепить в памяти тобою прочитанное. Толку от того, что будешь читать как художку - на след. главе забудешь, что было в предыдущей.
#515 #565905
>>565901

Да нет, обычно как раз сетуют на то, что оче сложно, сухо и вообще тяжело читается. Например, https://toster.ru/q/110909
#516 #565907
>>565898

>читаешь задание -> минуту-две прокручиваешь в голове как её решаешь и приступаешь к новому. Если что-то становится непонятно - пишешь код


Сомневаюсь, что для новичка это будет хороший вариант. Иногда подводные камни всплывают только во время написания кода (особенно по началу, ибо опыта нет), но это касается в основном уже более-менее выходящих за рамки хеловорлда программ. Мне кажется, гораздо лучше прокрутить эти задания в голове и написать небольшую программу, которая бы использовала все новые возможности.
#517 #565911
>>565891
Или ты хочешь оценить сумму ряда сверху? Бесконечность - ряд расходящийся, но вряд ли ты пришел спрашивать задачу по матану в зк, так что иди нахуй, говно блять собачье.
#518 #565912
>>565904
Это невозможно. Когда тебе теорию преподносят вместе с постепенной модификацией кода, то она у тебя в голове просто впечатывается. Если ты, конечно, жопой текст не читаешь.
>>565907
Все задания вместе реализовывать == прорешать от первого до последнего. Разве что по приоритетам их разбрасывать, хотя заведомо нельзя понять, где ты можешь обосраться, а где без ошибок написать. Не знаю в общем, не думаю, что Страуструп пихает в каждое упражнение какой-нибудь подводный камень. В принципе, это можно из контекста понять, когда: "вот там мы делали так, а сейчас ты сделай так и посмотри что будет".
#519 #565913
>>565911
>>565902
Блять. Я знаю что такое O. Но почему ты говоришь, что "НУ ТАМ БЛЯТЬ СУММА КАКАЯ-ТО, НУ ЗНАЧИТ БУДЕТ ЛИНЕЙНАЯ СЛОЖНОСТЬ.
С чего ты вообще решил? Сложность была бы O(N), если там внутри была константа.
#520 #565918
>>565913
Ты необучаемый, пиздец. Это и есть сумма КОНСТАНТ
1/log(1) + 1.4/log(1,4) + ...
Сумма зависить только от N и ни от чего больше.
#521 #565921
>>565918
Можешь привести пример, в котором с суммой получалась бы не линейная сложность?
6 Кб, 322x241
#522 #565926
>>565921
Сумма от суммы, например.
Пик - пример. Если m=n, то сложность квадратичная. Ну и так далее.
Можно вообще полином замутить, если взять произведение сумм.
#523 #565946
>>565926
А если m будет равняться, например, тому же sqrt(n) / log(sqrt(n))?
#524 #565954
>>565946
O(n2sqrt(n)/log(n) = O(n^1.5/log(n))
#526 #565969
>>565957
А если вместо n будет i?
То-есть, первая сумма: 1 <= i <= N
Вторая сумма: 1 <= j <= sqrt(i)/log(sqrt(i))
Просто добавится коэффициент 1/2?
#527 #565974
>>565969
Сложность не изменится от того, что переменную я назвал n или i.
Коэффициент не нужен, выше уже объясняли, почему.
log(sqrt(i)) = 1/2*log(i), это вроде из 5 класса.
#528 #565985
Прихуел с того пидора, который ссылку от указателя не отличает.
А ведь таких пол /pr/
#530 #566693
>>565388
Причем тут файловая система? Немного не понял.
Тред утонул или удален.
Это копия, сохраненная 19 ноября 2015 года.

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

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