+ Информация о файлах (картинках) теперь хранится в базе (да, раньше в файле хранилась, потому что изначально не предусмотрел и было лень переносить посты из старой базы в новую). + Ссылки на посты теперь хранятся в отдельной таблице, что существенно увеличивает скорость их добавления и особенно удаления (раньше при удалении приходилось читать и записывать каждый пост). + Добавил поле "userData" в таблицу "posts" - дополнительные данные для нестандартных досок. Раньше приходилось извращаться с запихиванием, например, в поле "subject", то есть жутчайший говнокод. + Проверка капчи и все операции с файлами (сохранение и создание превью) теперь происходят до начала транзакции БД, чтобы не вызывать длительной блокировки. + Удаление файлов происходит после завершения транзакции, что, как и в предыдущем пункте, снижает длительность блокировки, а также не приводит к преждевременному удалению файлов, если вдруг транзакция откатится. + Файлы превью при откате транзакции теперь также удаляются (раньше не удалялись).
Прочие мелочи:
+ Для файлов без расширения оно автоматически выбирается на основе MIME-типа и добавляется к имени. + Теперь отображается дата и время последнего редактирования поста. К черновикам не относится (пока пост в статусе черновика, его можно сколько угодно редактировать, эта шняга не появится). Сделано, по сути, для того, чтобы показывать, когда мочератор/админ злоупотребляет полномочиями, чтобы без повода все подряд не редактировал. + Забаненные IP, а также IP, запросы с которых не логгируются, теперь задаются в виде диапазона (192.168.0.1-192.168.0.255), а не wildcard'ом, как раньше. + Исправлено отображение трипкода (а то он даже при включенной галочке не отображался, может это и к лучшему было, лол).
И еще (хоть к движку это и не относится): отключил форму поиска, а то, говорят, у некоторых страница не отображалась, пока эта сраная форма не прогрузится (что странно, ведь у меня то отображалась).
>>456736 В целом да, еще неплохо бы изучить предметную область. Ну и как правило Qt и STL вместе не используются. Еще boost посмотри. Все зависит от конкретной конторы и конкрртной задачи.
Определить високосный год или нет. Я хз, как это будет на с/с++. Погуглил стандартные функции работты со временем и вляпался в какие-то указатели из буста и прочих извращей. Крч, идите нахуй, русафобы.
>>456723 няши, помогите пожалуйста, неправильно работает код, мне нужно вставить после первого слова чётной длины заданную подстроку, то есть "", то есть остальные слова должны просто сместиться, а у меня почему-то если после первого чётного слова слова идут нечётной длины, они вообще не выводятся. Помогите пожалуйста))
>>456852 // сколько слов в строке чётной длины. //Вставить заданную подстроку, например ””, после первого такого слова #include <iostream> // Для cout using namespace std; #include <string.h> // Для strcpy_s(), strtok_s(), // strlen()
void main() { char str[300]; // Исходная строка char str2[350] = ""; // Полученная строка char razd[] = " \t\n"; //Символы-зазделители (если нужны еще знаки пунктиации - то // char razd[] = " \t\n.,!?"; char token= NULL; // Очередное слово char next_token = NULL; // Слово, за очерезным int len; // длина текущего слова fgets(str, 300, stdin); // читаем строку с клавы // Разбивка str на слова token = strtok_s(str, razd, &next_token); // Получение первого слова из str bool flag = true; // true - первое слово четной длины int count = 0; // кол. слов четной длины while (token != NULL) // Получено очередное слово { len = strlen(token); // Печать текущего слова и его длины (для наглядности) cout<< token<< " len= " << len <<endl;
if (len % 2 == 0) // слово четной длины { count++; strcat_s(str2, token); // копируем его в результат strcat_s(str2, " "); if (flag) // если это первое слово четной длины { strcat_s(str2, " "); // добавляем flag = false; } } // Получение следующего слова из str token = strtok_s(NULL, razd, &next_token); } cout << "Result ========================" << endl; cout << "count = " << count << endl; // печать кол. слов cout << str2 << endl; // печать полученной строки system("pause"); }
>>456603 >>456613 Ну хорошо. Вот беру я квадратный корень из дабла, велосипедная функция, возвращающая дабл. Сначала действительно проверяю, неотрицательный ли аргумент. Если нет, кидаю исключение. А вы ЧТО БУДЕТЕ ДЕЛАТЬ?
На всякий случай переведу, а то щас же в школах не учат инглишу: >For any fixed-width integral type, nearly all of the possible input pairs overflow the type, anyway. What's the use of standardizing a function that doesn't give a useful result for vast majority of its possible inputs? >Для любого целого типа фиксированной размера почти все возможные пары аргументов [функции pow] приведут к переполнению типа. Нахуй нужна функция, которая не дает полезного результата для подавляющего большинства возможных входных параметров?
>>456940 А мне надо поделить на 0, например. И я не хочу при этом выкидывать исключение, хочу поделить на ноль и получить результат. C++ же. Уебывай уже на хуй, клоун.
>>456941 Ты мне в дети годишься, если что. Если ты тот же сажист, что и обычно в плюсотредах. Английский в переводе не нуждается.
Короче, что я хочу сказать: если у меня есть ситуация, в которой я не собираюсь возвращать результат. И собираюсь бросить исключение. Ия это сделаю. И не вижу в этом ничего плохого.
>>456943 Ты мой хуй пососать годишься. На сосаче он будет возрастом хвастаться, охуеть вообще. Видать твоя жопа уже кинула исключение, и не нашлось обработчика. Делай что хочешь, тебе никто не запрещает, только не неси сюда свое говно и даунские bad-practices.
>>456944 Пиздец, умные люди проектировали, книги писали на тыщи страниц Exceptional C++, а тут анон сказал, что исключения не нужны. Катись к хуям, быдло.
>>456960 Нет, ты. Не менее умные люди пишут фреймворки типа Qt, в которых исключения не используются вообще. И, в отличие от кукаретиков-писателей, эти люди делают что-то реальное, а не выдрачивают давно устаревшую теорию за тарелкой борща.
И да, хуило великовозрастное, ты мои слова то не перевирай, никто тут не говорил, что исключения не нужны вообще. Я даже писал, где они нужны. Но тебе же лишь бы еблом пощелкать.
>>456960 Исключения - зло. Они медлительны, раскручивают стек и вообще приводят к непредсказуемым последствиям.
Посмотри на прекрасный пример обработки ошибок - WinAPI. Коды HRESULT быстрые, макросы для них понятные, система определяет подробное описание всех кодов и они очень удобны в обработке. А исключения громоздки, медлительны и неудобны.
>>456981 В предыдущем было же, почти в самом конце: https://2ch.hk/pr/res/448310.html#456499 >это дрисня носорога для ебанутых тырпрайзщиков с миллионами строк бойлерплейта, в котором даже автор не разберется, потому что ему похуй на свою программу, лишь бы денег срубить, а думает пусть кто-то другой (в итоге не думает никто, все только и делают, что кидают и ловят исключения). Это, разумеется, эмоционально окрашенный вариант, а суть такая, что исключения нужны, когда код огромен, когда над ним работает много людей, кто-то уходит, кто-то приходит, мало кто представляет, как работают отдельные части кода, а весь проект целиком и вовсе знает никто. Здесь да, без исключений никак. Но в функции вычисления квадратного корня они совершенно ни к чему, равно как и в курсачах на три тыщи строк, которые можно с закрытыми глазами на бумажке написать и не ошибиться.
Допустим, имеется заведомо положительное число int x; (я про заведомую положительность знаю из другой функции, компилятор будем считать не в курсе) требуется найти его остаток от деления на положительное число unsigned int y;
>>457204 и так же ясно внутри класса где член класса человек же может в контекст классы в разных файлах лежат еще в джаве в андроидных туториалах такое видел. а еще какие-нибудь причины есть?
>>457175 Тогда только прямая работа с виртуальной памятью, только это троллейбус из буханки. Проще сделать что-то вроде deque - выделять память крупными кусками, хранить их список в векторе, и поверх этого приделать индексацию.
>>457235>>457241 > char *str2 = new char[] > я никак не инициализирую этот массив Ну это конечно круто, но по хорошему ты должен указывать число элементов в char[]. Его можно считать из расчета - необходимая длина строки + 1 (для \0).
Иначе много строковых функций наебнутся, ища конец строки в необнулённой памяти.
Алсо, с таким подходом используй std::string, а то у тебя совсем охуительные истории получаются.
>>457252 > мы ещё не проходили Ну ты и тупой. С таким подходом мог бы вообще забить на всё. Изучай самостоятельно, блджад, хуева тьма книг/туториалов для кого написана?
>>457261 Твоя ошибка написана прямым текстом в пятой строчке. Тебе уже говорили по \0 и неправильно выделенную память. Учитывая, что это я тут один такой добрый и я уебываю спать, гугли сам "строки в си".
>>457270 Эй, не надо за меня отвечать, я не использую функции и то, что мы ещё не проходили в универе не потому что мне лень что-то там учить, а потому что преподша требует делать задачи только с помощью того, что мы уже прошли с ней
Частенько бывает так, что пишу код и не совсем понимаю, что происходит. Решил это исправлять. Начал с указателей и ссылок. И моментально обосрался.
Итак, поясняем дегенерату за разницу ссылок и указателей.
Как я понимаю эту концепцию. 1. Указатель - это переменная, которая хранит адрес памяти. То есть пишем int i и считаем, что переменная i есть указатель на int. Какие действия можно производить с указателями:
A. Объявление. Можно объвить указатель int i; Только я не могу понять, что значить указывать на тип int.
B. Инициализация. Можно присовить указателю адресс какой-нибудь переменной. int ptr; int a = 3; ptr = &a;
C. Разыменование. Получение значения по адрессу, на которую ссылается указатель. int ptr; //ptr ссылается на int. int a=3; ptr = &a; //помещаем адресс переменной в ptr std::cout << *ptr; //производим разыменовывание и получаем значение по адерссу.
Теперь ссылки. Ссылка — это указатель, с которым можно работать, как с обычной переменной. Ссылка не может быть равна NULL. Указатель может. Ссылка не может быть непроинициализирована. Указатель может.
Хуесосьте и поясняйте, где я долбоеб.
=============== Теперь за код. Я где-то отрыл кусок библиотеки и пытаюсь его проанализировать - http://pastebin.com/3ht8y7eu Но некторые строки меня смущают. Я одно время был веб-макакой, но одумался. Поэтому учебники не очень подробно читают - пытаюсь практиковаться сразу. Некоторые вещи, которые, наверное, освещаны в учебниках, я мог пропустить, а как загуглить иногда не знаю. Не обессудьте в общем.
13 Line: QSMatrix(unsigned _rows, unsigned _cols, const T& _initial); Это мы в конструктор передаем три переменных: _rows, _cols и переменную типа T _initial (Много типов можно int, double); Только я не могу понять - почему перед переменной const.
41 Line: const T& operator()(const unsigned& row, const unsigned& col) const; Что значит const в конце? Я читал пару исходников и встречал там подобное объявление.
Остальное потом поспрашиваю, сейчас, пока катал пасту, некоторые вещи прояснились.
>>457279 Олсо, вот этот ваш ассемблер. Как его вообще продуктивно изучать? У меня просто в жопе дикая боль от того, что я не понимаю, как некоторые вещи работатют, а на честное слово учбеникам как-то не взлетает доверять. Надо типа ручками попробовать.
Может есть какой эмулятор? Я видел как-то раз совет, что можно ассемблер изучать методом крэкинга софта. Видел одну невъебенно огромную статью, в которой этим заниались.
>>457281 >Что метод не меняет состояние объекта, т.е. поля класса не меняются, но тут тоже есть свои заковырки со всякими mutable. Да что ж блядь все так сложно-то. Так-с, значит если этот метод попытается изменить состояние класа, то компилятор выдаст ошибку? Или что? Какое предназначение этой штуки?
>но тут тоже есть свои заковырки со всякими mutable Не буду пока вскрывать эту тему, да.
Анон, у меня есть метод print(const std::string&) для вывода инфы в консоль. Как можно понять, работает он только со строками. Как мне сделать так, чтобы он принимал еще и разные числа и bool? Перегружать для каждого типа отдельно? Но это будет проблематично, потому что у меня довольно много таких функций типа messageBox, fatal, assert(bool, const std::string&) и я заебусь каждую перегружать.
>>457273 Вообще, разумно. При обучении человек должен решать задачу определёнными средствами,в этом и есть смысл обучения. Уже в работе челвоек выбирает средство.
>>457282 > Да что ж блядь все так сложно-то. > Так-с, значит если этот метод попытается изменить состояние класа, то компилятор выдаст ошибку? Или что? Именно так.
>>457282 > Какое предназначение этой штуки? Гарантировать неизменность данных. Передавая объект по константной ссылке в какую-нибудь функцию, ты можешь вызывать только методы объекта с модификатором const.
>>457287 интересный подход, прокатил у меня в точных науках, но не в программировании
вообще, оглядываясь назад, программирование лучше начинать с осмотра проблем, которые сложно делать человеку, но легко машине и со всевозможных способов организации данных, попутно делая это на каком-нибудь простом языке вроде pascal. мимо-начинал-со-страуструпа-и-кидал-молотки-в-стены-от-непонимания
>>457307 >паскаль >понятный Да ты же упоротый. Это кухонная раковина наподобие PL/1 (с которого, собственно, и был слизан этот блевотный многословный синтаксис с его var, begin/end и прочей хуитой).
Быдлокодер под МК, учился на электронщика поэтому особо в программировании то и не шарю. Все учил сам методом проб и ошибок. Вообщем то проекты пишу, вроде бы даже придрочился и все хорошо работает. Так вот что почитать по С++ эмбедеру, что бы вырасти в профессиональном плане?
Почему mktime может крашить программу? Такого поведения у него ведь не должно быть вообще? Структуру пробовал мемсетом инициировать в 0, выносил из локального скоупа, не помогает.
>>456736 >Лекции и упражнения", автор Прата В этой книги есть какие-нибудь интересные примеры? У меня просто дико жопу рвет сейчас. Я, вроде бы, знаю основы языка, но сука, не могу их нормально использовать в проектах.
Пилю проект. Взял boost. Просто охуеваю от непонятности некоторых частей. Половина кода копипастой, ибо поставил себе определенный дедлайн.
Дико печет, что, вроде бы, знаю, но на деле нихуя не знаю. Хули делать, я уже волосы их жопы выдергивать начинаю.
>>457060 >Я, вроде бы, знаю основы языка, но сука, не могу их нормально использовать в проектах. Потому что надо начинать с джавы. Там целый день сидишь, капчу двачуешь, а у тебя пяток классов написано на пустом месте.
Ананас, есть ли возможность после инициализации увеличивать размер зарезервированной памяти поинтеру на тип данных? Например, чтоб дописывать чары в строку, заданную поинтером на чар.
>>457173 Мало анальных извращений. Хочу самописный класс-контейнер "текст", который работает по принципу адресной арифметики и может дополняться на ходу, поэтому, естественно, просто адресная арифметика мне не подходит.
>>457292 Ну я бы хотел, чтобы использовать их было как можно проще, т.е. без всяких конверсий в вызове. Может там синтаксис какой есть. Но, так понимаю, без перегрузки такого сделать не получится, поэтому перегрузить каждую функцию и вызвать из нее оригинальную с to_string кажется уже не такой плохой идеей.
>>457294 Либо to_string, либо перегрузка. Больше никак. Можно еще, конечно, сделать одну перегруженную функцию, void universal(std::string s, Action a); где enum Action { Print, MsgBox, Fatal, Assert }; и внутри вызывать to_string и нужную функцию, но это тупо. Типа такого: if (!cool) universal(100500, Fatal); else universal(9000.1, MsgBox); Но это, повторюсь, тупо и костыльно.
>>457369 >binary Ты тупой совсем? of << 'a' это тоже самое, что char a='a'; of.write( &a, 1 ); >Стринг ещё какой-то, он-то тут при чём? При том, что to_string<string> не определен >Ничё не понял Ты ведь в ПТУ учишься, я угадал?
>>457479 >A handle to the job whose processes will be >terminated. The CreateJobObject or OpenJobObject >function returns this handle. This handle must have >the JOB_OBJECT_TERMINATE access right. И что происходит?
>>457507 >Русских людей обижают! Ну ничего, братушки, скоро мы вас ОСВОБОДИМ. никто меня не обижает, скажу больше я свободно говорю на русском в Харькове и Мариуполе просто документация должна быть на государственном языке
>>457589 Подключи библиотеки необходимые. В справке каждой функции указана либа. В свойствах проекта линкера есть поле, куда заносишь имена этих .lib файлов. Если они валяются по нестандартным путям, прописываешь пути в соответствующем поле.
>>457953 По кочану. Шаблоны в крестах - не дженерики, как в жабе. Это нечто уровня макросов, если не вдаваться в подробности. Используй QVariant или аналоги, ну или union, но с этим осторожнее.
>>457953 >Но почему? Потому что для компилятора это абсолютно разные классы. >И как в таком случае быть? Например, хранить в векторе указатели на экземпляры классов. Или использовать что-то вроде Boost.Variant.
Мудак на связи. Решил обмазаться этим вашим QT, в котором есть все, даже небо, даже аллах. Подскажите годной литературы, а то я открыл qt'шные примеры и заблудился.
>>456726 чего ты там нахуярил то столько, блядь? нужно ж два раута: создать пост и получить новые посты аяксом html с тредом в большинстве вакаб сохраняется в файл и дальше уже статически раздается
итого: - fastcgi либа (или можно охуеть и сделать просто cgi борду повесить демоном и общаться с ней как-нибудь). если кровь из носу хочется хостить самому (но зачем) - mongoose - база из одной таблицы (пикчи хранить в файловой системе). даже если руками делать нуждно то btree и файлмаппинг в память (у нас же не банк, упадет и хуй с ним). ну или взять какой-нибудь leveldb, а лучше вообще sqlite - 2 простых как палка раута + сколько влезет раутов для админки с какой угодно логикой - (опционально) SSI или ручной сервинг для собственной капчи или csrf токена - шаблоны, что одинакого рендерятся и на клиенте и на сервере (mustache подойдет, логики в бордовском шаблоне ноль). для подсветки синтаксиса проще на клиенте highlightjs или prism взять. - 2 кило жс кода для подгрузки и расставления новых ссылок
короче, мне кажется, ты, браток, перемудрил и я бы не назвал борду lightweight: - судя по тому, что нулевая приходит 450мс ты рендеришь все заново каждый раз - иконки приходят по одной, 60-70мс на каждую
>>458210 >fastcgi либа Нахуя? Чем тебе отдельное приложение не угодило? VPS и вперед, если охота платить бабки за сайт, которым никто не пользуется. Мне вот не охота, поэтому у меня и хостится. >база из одной таблицы Я посмотрю, как ты будешь заново отрендеривать ссылки на посты при их удалении с такой архитектурой. Фичу с хешами файлов и подавно так не реализовать. >sqlite И так. Нахуй тут что-то другое? >2 простых как палка раута Редактирование поста, удаление поста, получение новых постов, проверка хеша файла и так далее. >SSI Чет нихуя не понял, зачем мне это. >mustache Лишний скрипт - лишний вес. Увы. А так мне идея очень понравилась. >проще на клиенте highlightjs или prism взять Это сразу на хуй. Во-первых, см. предыдущий пункт, во-вторых это не задача клиента. Ты еще бы предложил вакабамарк на клиенте рендерить. >2 кило жс кода для подгрузки и расставления новых ссылок Присутствует. В два кило, правда, без дополнительных зависимостей и без минификации не сделать. >приходит 450мс Проблемы клаудфлары, я полагаю. >рендеришь все заново каждый раз Сама страница да, рендерится. Но каждый отдельный пост по большей части кеширован (не кешируется только то, что надо локализовать, дата/время, например, или названия кнопок). >иконки приходят по одной, 60-70мс на каждую Опять же, проблемы клаудфлары, скорее всего. Оно там у них в кеше, что якобы должно прибавлять скорости. Наверное отключу на хуй это говно. Так то статика у меня в памяти кешируется, не должно так долго отдаваться.
>>456726 А тем временем: + Исправлено сообщение "Вам не надо вводить капчу...". Теперь после очередного поста обновляется. + Добавлена поддержка видео форматов .mp4 и .ogg (.ogv). + Реализована поддержка аудио (.mp3, .ogg, .wav). + Для всех поддерживаемых типов файлов добавлены иконки в поле выбора файла. + Загрузку файлов из треда теперь можно прерывать. + Количество постов без ввода капчи теперь сохраняется после перезапуска сервера. + Добавлена новая разметка (для тех кому не нравятся bbCode'ы). https://ololoepepe.me/board/pr/thread/15.html#165 + Реализован свой поиск, без использования гугло-апи. Пикрелейтед.
>>458464 Конечно. Я вообще думал прикупить пикрелейтед, но чет в сомнениях, не наебалово ли, они ж недоступны для продажи были. Надо у других провайдеров еще посмотреть. Да и вообще, из доброй памяти не хочу трогать. Но все равно очень заманчиво.
Плюсач, вобщем у меня есть одна программа, она расчитана на многочасовое выполнение, вобщем, как реализовать многозадачность\\хз как назвать. Допустим есть алгоритм: cout<<12; sleep(1000); и cout << 13' sleep(1213); как сделать возможным одновременное выполнение сего?
>>458250 > Чем тебе отдельное приложение не угодило? нахуя смешивать две ортогональные вещи? захотел прямо в процессе сокет держать, ну так возьми mongoose, он из двух файлов состоит и простой как пробка
> VPS и вперед, если охота платить бабки за сайт, которым никто не пользуется. Мне вот не охота, поэтому у меня и хостится. то есть ты не осилил поднять nginx с fastcgi модулем на своей убунте? серьезно?
> Я посмотрю, как ты будешь заново отрендеривать ссылки на посты при их удалении с такой архитектурой. Фичу с хешами файлов и подавно так не реализовать. лолшто? ты же все равно вытаскиваешь весь тред из базы. у тебя посты для всех айдишников в треде, в шаблоне и так подсвечивать ">>id", а посты из других тредов подтягиваются аяксом, т.к. редкость и нинужно
> Редактирование поста, удаление поста, получение новых постов, проверка хеша файла и так далее. просто прикинь как бы ты это все написал на каких-нибудь руби в синатре, это был бы один файлик на 100-200 строк, 50% функциональности борды, а то и больше. на крестах можно придется писать больше, в любом случае, но не на порядки
> Лишний скрипт - лишний вес. > отправляет на клиент не минимизированный html и js, а картинки 16х16 вообще одной > mustache.min.js 8.835 kb лол
> во-вторых это не задача клиента охлол, хватит жить в 98ом, клиент рендерит ебать сколько всего сложного (посмотри на свои html шаблоны лол), может емулировать х86 на js и эта подсветка ему как два пальца
> Проблемы клаудфлары > клаудфлары > проблемы лол, то есть это не ты контент медленно отдаешь, а специализированная система доставки контента, которая на этом к тому же деньги делает, виновата?
> не кешируется только то, что надо локализовать, дата/время, например, или названия кнопок > локализация и темплейтинг на сервере > 2015
> Так то статика у меня в памяти кешируется тот же nginx сделал бы это куда лучше
ты, короче, придумал себе проблем, а теперь героически их решаешь
>>458253 > Как я и говорил, проблемы флары, чтоб у них понос случился. И отчасти твои проблемы тоже, судя по всему. ну хуй знает
>>458511 > захотел прямо в процессе сокет держать, ну так возьми mongoose, он из двух файлов состоит и простой как пробка ты примерно так и сделал, тащемта, тут я не прав
>>458511 >нахуя смешивать две ортогональные вещи? Какие две вещи? Приложение получает запрос, обрабатывает его, отдает ответ. Что с чем смешано? >не осилил Осилил, но нахуя? Что мне это дает? Скорость? Упрощение логики? Какой именно? >нинужно Ясно. Засчитано. И нет, тред вытягивается не весь, ссылки между постами хранятся в отдельной таблице. >был бы один файлик Не был бы. Писал я на ваших скриптопарашах, когда кейс выходит за рамки хеллоуворлда, получается точно такой же объем кода. >лол >охлол Теперь я знаю, из-за кого веб стал таким говном. >лол, то есть это не ты контент медленно отдаешь, а специализированная система доставки контента, которая на этом к тому же деньги делает, виновата? Лол, то есть это не ты в глаза долбишься и отрицаешь очевидные результаты со скринов, а я медленно что-то там отдаю? >тот же nginx сделал бы это куда лучше Как nginx относится к моему приложению вообще? Правильно, никак. Не надо смешивать ортогональные вещи (с). >ты, короче, придумал себе проблем, а теперь героически их решаешь Никаких проблем нет, все прекрасно работает. >ну хуй знает Придумай более другое объяснение скриншотам. Время чистого рендеринга/отдачи статики сам видишь. Никаких 400мс там и близко нет.
Я вот что скажу, у нас с тобой разные взгляды на то, как все должно быть устроено. Разная философия, что ли. Может, я в чем-то и не прав, а может и ты.
>>458527 Пожалуй, поясню еще по поводу nginx. Не хочу раздристывать логику по всем уровням, потому как это каждый раз боль при переносе на новый хостинг. Надо все заново настраивать и т.д. Не думаю, что nginx умеет каким-то чудом быстрее обращаться к памяти. Так что пусть оно все будет в одном флаконе, так сказать, работоспособное как с nginx-ом, так и с другими приблудами, или вовсе без них.
>>458558 >опыт решения реальных задач >на сосаче Ты серьезно? А вообще, только ручками, похоже. Гугл говорит, что готовых решений нет. Так что перегоняй байтики в нужный формат (что у тебя там, png, jpeg?) и, если надо, уменьшай размер.
>>458498 да, допустим у меня есть две функции class c1 { MYOBJECT mo; void ff(); } void f1() {return ;} и в классе MYOBJECT описана функция void f2() {return ;} void c1::f1() { QFuture<void> qF = QtConcurrent::run(f1) - комиплируется QFuture<void> QF = QtConcurrent::run(this->mo.f2) - ошибка return ; }
>>458798 в целом получилось, функция запускатеся отдельным потоком от мейна, основной виджет продолжает функционировать несомтря на Sleep(1); не получается запустить несколько потоков выполнения. void mwindow::on_alg_dk_1_clicked() { QtConcurrent::run(&this->alg, &ALGORITHM::simple_rotation); //ALGORITHM - class, alg - object of ALGORITHM in class mwindow; }
void mwindow::on_alg_dk_2_clicked() { QtConcurrent::run(&this->alg, &ALGORITHM::algorithm2); } /////////// void ALGORITHM::simple_rotation() { bool1 = true; while (bool1) { wHandle.send_char(0x41); QThread::sleep(2); } return; } void ALGORITHM::algorithm2() { bool2 = true; while (bool2) { wHandle.send_char(0x42); QThread::sleep(3); } return; } первая кнопка заупскает выполение 1й функции, но после нажатия следующей новый поток не работает
>>458861 Он и не должен. Смотри доки: http://doc.qt.io/qt-5/qtconcurrent.html#run >Runs function in a separate thread. The thread is taken from the global QThreadPool. Note that function may not run immediately; function will only be run once a thread becomes available. http://doc.qt.io/qt-4.8/qthreadpool.html#maxThreadCount-prop >The default maxThreadCount is QThread::idealThreadCount(). Обычно это количество ядер. Так что попробуй QThreadPool::globalInstance()->setMaxThreadCount(10);
>>458874 В говновузе по удаленке пилю редактор TeX на крестах. Можно считать что не работаю, уже полгода как не притрагивался к коду. Платят соответственно.
Кстати, поясните мне за потоки обычные, которые из stl. Вот ты пишешь, что хочешь 12 потоков, а у тебя процессор старый. Если мне память не изменяет, что Hyper-threading дай б-г только в 2002 появился, если не позже. Как же реализовывали многопоточные приложения до этого? Что-то типа два потока становились в очередь, выполнялись, а потом сообщали, что выполнились? Вот я, например, пидорил программку на сокетах - простой tcp чат. И одним потоком слушал, а другим отправлял сообщения. Как же это реализовали бы на процессорах первых поколений PentiumIV?
Олсо, знакомый рассказывал о том, что используя одну фичу - если переполнить буффер, то программа перескакивала на выполнение другой функции, которая даже не вызывалась.
void lol() { cout << "How did we get here?"<<std::endl; }
int main() { long a, b, z[10]; cin >> a >> b; z[a] = b; }
вводишь два определенных числа и программа "How did we get here?". Собственно похуй за переполнение, но товарищ отметил, что подобную фичу использует в некоторых проектов в качестве альтернативы многопоточности. В чем соль?
>>458877 Ну и то хорошо. Главное, чтобы на хлеб было чего намазать.
>>458927 1) Зачем нужны weak_ptr. 2) Что такое mutex 3) Что такое deadlock 4) Что такое race condition 5) Что такое слот-сигнальная архитектура 6) Знаете ли вы Boost
>>458945 годно, спасибо. 1. как шаред птр только при захвате объекта не искрементирует рефкаунтер 2. одно из средств организации доступа к объекту в условиях N потоков 3. состояние взаимной блокировки 4. хз че-то с потоками вроде тоже? 5. когда на определенное действие генерируется сигнал и ему сопоставляются слоты (типа как в Qt)? 6. нет конкретики. filesystem, regex, matrix часто. ну и по мелочам (intrusive_ptr, noncopyable и тд)
>>458945 Я не он, но: 1) Костыль. 2) Хуйня для совместной работы нескольких потоков с одним набором данных (переменной). 3) Лок нерекурсивного мьютекса из одного и того же потока, например. 4) Когда потоки одновременно пытаются работать с одним куском данных, и в каком порядке произойдет взаимодействие неизвестно (а может один поток начнет работать, когда второй еще не закончил и кровькишкираспидорасило). 5) Костыль для замены рефлексии, но довольно удобный. 6) Говно ебаное. Нахуй не нужен. Шутка. 7) Лень описывать, но короче статик самый строгий, динамик так и сяк, а ренинтерпрет - можно в ногу выстрелить. 8) Таблица виртуальных методов. Чтоб короче из приведенного к базовому классу объекта наследованного класса можно было вызывать виртуальный метод, а вызывался метод, определенный в наследованном классе. Создается если есть хоть одни виртуальный метод (вроде). Нахуй я это пишу.
>>458946 8. таблица вртутальных функций для класса, нужно наличие как минимум 1 виртуальной функции 7. вот в этот говне я плаваю сильно, с кастами слабо всегда было. динамик каст ну для иерархий вируальных классов. static cast и обычный - хз не знаю разницы, по-моему оба каста времени компиляции обычные, с проверками типов const cast снимает волатайл и конст, хз не юзал ни разу в жизни reinterpret cast типа без проверки типов каст, хз тоже не юзал ни разу
про касты если простым языком напишешь и конкретно где применяется конст и reinterpret было бы круто
>>458949 Так-то верно, но от 1,4 МЫ ВАМ ПЕРЕЗВОНИМ 1) Не как устроен а зачем нужен, юзкейсы. На собеседованиях кстати почти всегда спрашивают о юзкейсах в каком-то понятии а не об абстрактном определении. Было ли у тебя такое на практике. Что именно приводило к ситуации.
Ответы сам нагуглишь, они легко гуглятся.
>>458952 >1) Костыль. Вот такое на собеседовании тоже нельзя говорить, на крестах пишут старпёры по 40 лет, и тут какой-то сопляк в скайпе им будет пояснять что костыль а что нет. У них от этого сразу НЕПРИЯТНО становится. >5) Костыль для замены рефлексии, но довольно удобный. ШТО? >6) Boost не нужен Лол, boost это как всякие Spring и Hibernate для жабы, без него никуда. >>458953 Если честно то там где я работал никто не юзал ничего кроме static_cast и били по голове если кто-то вообще пытался использовать RTTI. Вся работа по определению типа была сделана сквозь Visitor'ы (Паттерн такой, самый наркоманский на первый взгляд). Хотя по идее ведь даже сквозь Visitor мы используем RTTI неявно, когда вызываем внутри виртуальный метод обьекта. Так-что я кроме static_cast и dynamic_cast ничего и не помню.
>>458960 А что не так? Хз как в ваших бустах это реализвано (и знать не хочу), а в Qt сигналы и слоты позволяют вызывать методы по имени, то есть ты можешь хоть в рантайме у юзера запросить строку с названием метода и вызвать его. Не только это, конечно, но в основе именно оно лежит. Метакомпилятор добавляет в отдельный файл таблицу соответствия названий методов и самих методов (ну и сигнатур, само собой). В жабе все это при помощи рефлексии делается, ну, там, [code lang=cpp]object.call("methodName");[/code] или типа того, точно не помню, а в Qt [code lang=cpp]QMetaObject::invokeMethod(object, "methodName");[/code]
>>458961 ладно спасибо, про weak ptr я только в теории тоже знаю, тк не использовал тоже ни разу, я ж вообще не с++ программист, а потоки и паттерны да, надо подтягивать обязательно, спасибо
>>458960 >Что такое SFINAE? И нах он нужен? лил, хз >Что такое идеальная передача? шта? >Какие условия должны соблюдаться, чтобы тип был POD? для меня это любой тип в с++ пришедший из С (не ООПшный карочи)
>>458961 >нельзя говорить Мне поебать. Пусть берут мудака, не умеющего думать, зато умеющего лизать, их дело. Костыль есть костыль. >ШТО? См. >>458964 >без него никуда И как же это я без него живу? Ни одного метода из буста не знаю на память, срсли, никогда не испытывал проблем, ведь есть Qt. Хотя, может в байтоебстве и нужен, я ж написал что шутка, но мне оно не интересно. >Паттерны Прости, слово-триггер, не удержался. Пикрелейтед.
>>458964 Тёплое с мягким перепутал. Мок в кутах, конечно, позволяет получать метаинформацию об объектах, но вопрос был про архитектуру сигнал/слот. Вещи связанные, но ответ должен был быть в духе: Мамка посылает сигнал, что приезжает тётя Люда, после чего у Бати срабатывает подключённый слот – одеть праздничные штопанные труханы.
>>458960 Алсо, >SFINAE Костыль, опять же, но точнее плохой дизайн, но полезно. >идеальная передача Это не && ли в конструкторе случаем? Очередное байтоебство, может где-то и пригодится. >POD Ну вот нахуя это знать на память? Заняться что ли больше нечем? Тип без конструкторов, деструкторов и виртуальных методов. Не представляю, где это необходимо знать заранее.
>>458970 Я описал как оно внутри работает. То что ты говоришь и так очевидно: кто бы мог подумать, что испускание сигнала вызывает слот! Вот это нежданчик.
>>458919 1. Несколько переменных одинакового типа объявляются так: int a, b, @c (@ вместо звездочки). Вопрос: как это все взаимодействует с const? Можно ли делать int a, const b, @const c? 2. В чем разница между const char @c = "..." и const char c[] = "...". 3. Для чего нужно ключевое слово mutable.
>>458973 Ну то есть я хочу сказать, вызывающий передает системе строку с именем сигнала, система смотрит, какие слоты (опять же, по именам) прикручены, находит их, вызывает. Если тип соединения соответствующий и/или получатель живет в другом потоке, то ставит в очередь этого потока, там свой цикл уже разбирается при очередном проходе. Но суть все равно в том, что оно основано на рефлексии, иначе получается как в бусте коряво и нинужно.
>>458974 1. >Можно ли делать int a, const b, @const c? const b нельзя @const c можно 2. первое констатный указатель на строку в read-only памяти, второе массив на стэке 3. чтоб const методы могли менять эти переменные
>>458975 А мы с вами, неаргументированный хуесос, даже связываться не будем. >>458974 >1 Не еби никому мозги, так объявлять переменные - все равно что ходить с голой обосранной жопой по улице. >2 Синтакисчески сахар вроде. Если правильно помню, в обоих случаях будет указатель на ридонли память (хотят тут от конпелятора и системы зависит). >3 Чтоб переменную класса с этим модификатором можно было менять в const-методе. Как правило используется для мьютексов или каких-то внутренних счетчиков (последнее часто - плохой дизайн).
Все, ну вас на хуй, специальисты по байтоебству, блять. Лучше гаремник очередной посмотрю пойду, чем с тырпрайзщиками спорить. Скрипт ставьте, кстати, не зря же делал https://2ch.hk/pr/res/457262.html
>>458979 >Разве есть разница? Есть. В случае указателя на строку тут две сущности. Указатель и сама строка. Для указателя выделяется отдельное место в памяти, туда записывается адрес начала строки. Можно получить адрес этой указателя. В случае массива отдельного указателя не создается, при использовании данной переменной сразу подставляется адрес массива.
>>458996 Строка есть и там и там, только в случае указателя есть еще и отдельная переменная с ее адресом. То есть можно сделать: char @c = "asdf"; char @@pc = @c; С массивом так не сделать.
>>458992 Мы не на собеседовании. Ебал я тут распинаться перед даунами. Это во-первых. Во-вторых, мне поебать, что оно там задействует и как это что-то называется, мне важно как оно работает и какие нюансы при этом всем. Именно поэтому я пишу программы, а кукаретики пишут факториалы.
>>458999 так иди зарабатывай кэш, одноруппник долбоеб с 0 опытом работы и практически 0 знаниями на 40к устроился спп дрочером, что вполне неплохо >>459002 все, всё понимают, расслабься
>>459002 >мне важно как оно работает и какие нюансы при этом всем Работает так, что static_cast делается при компиляции, а dynamic_cast - в рантайме, с помощью RTTI. А нюанс такой, что за пределами десктопа ни RTTI ни эксепшены часто недоступны, а без RTTI нет и дайнемик кастов.
>>459005 Блджад, я разобрался с самим языком, знаю некоторые основы обработки сигналов, немного SQL с Qt, а в вакансиях всегда требуют ещё какую-нибудь хуйню, из-за чего дико ссыкую.
>>459008 Я знаю, ты читай внимательно: >Лень описывать, но короче... Если все подробно описывать, на меленькую статью хватит. У нас же не собеседование.
>>459017 Да запарил ты, он и сам понимает знает он или нет, мы же тут не срез по знаниям устраиваем. Это его дело, хочет работать на С++ - узнает или знает, не хочет - и не нужно тогда. Может человек просто ради интереса решил ответить на вопросы.
Двощ, помоги разобраться почему цикл делает один присест и, забивая на условие выходит из него Сам код (функция ff=(y-1)/(x+1) но до пизды, потому что должен уметь со всем решать): double Y,eps,x=0,y=0,x1,y1,h,j=0; int a,b,N=5,i=0; eps=1e-6; a=0; b=20; h=(b-a)/N;
>>459033 Ну я циклы, массивы, указатели и прочее знаю, но вот как понеслось - weal_ptr, mutex - вообще какое-то говно, которое совсем чуть-чуть слышал.
>>459056 ну там многое написали это не непосредственно стандарт С++ а связанные с работой программиста вещи, а что касается кастов, RTTI, умных указателей и так далее то это все можно найти в любой книге по С++. открой любую из нормальных книг и листай с начала до момента пока не перестанешь понимать, оттуда и читай.
>>459061 Короче. У меня такой план. Я взял Парта и тупо выполняю все задачи, которые он задает в конце. Как только начинает валиться говно - читаю параграф, норм?
>>459056 Читай Амерааля про STL, Майерса с эффективными книгами и обзором модерн цпп, ещё Александреску. Про многопоточность в плюсах написал Вилльямс хорошо. Байтоёбом будешь.
>>457961 >Или использовать что-то вроде Boost.Variant. Нахуя тащить буст? Variant лучше самому навелосипедить-накопипастить, особенно с таким неокейным пониманием.
лол, ану-с, потестим [code] class Variant { public: Variant();
>>459131 Ебучая макака на каждом шагу ставит подножки. Обновите скрипт, исправил замену табуляции на \t, теперь заменяет все символы табуляции пробелами (количество пробелов высчитывается исходя из положения \t в строке).
Вопросец по велосипедным битовым полям. У меня имеется массив в памяти, который много раз в цикле заполняется битами. Т.е. он выделен с помощью malloc, а затем в цикле он заполняется (и потом пишется в файл, одна итерация цикла равна одной записи одного и того же размера). Т.е. получается бинарный файл. И уже после всех итераций цикла идёт free.
Как БЫСТРЕЕ делать каждый проход цикла: memset 0, а потом выставлять единички: for i = 0 ... i_max for m = 7 ... 0 if (ololo) arr|i] |= 1 << m
или прямо по старым значениям выставлять и единички, и нули: for i = 0 ... i_max for m = 7 ... 0 if (ololo) arr|i] |= 1 << m else arr|j] &= ~(1 << m);
P.S. Открывающую квадратную скобку заменил на | чтобы макаба квадратные скобки не схавала.
>>459199 Да оно не продается судя по всему, это либо глюк у конкретного провайдера, либо наебалово. А я как наивный мудак слюни распустил. Вот тут пишет, что мол занят домен: https://www.nic.ru Пробовать за такие бабки с шансом наебалова что-то жаба давит. inb4 копейки, но нет, жаба - она такая.
>>459203 Ну смотри. Мемсет - лишняя операция над целой областью памяти. Ты все равно проходишься по всем элементам потом, так что нахуя вызывать дополнительно мемсет? А вообще сделай массив побольше да проверь, сколько будет выполняться каждый вариант.
>>459131 Если хранить данные в хипе, то вместо твоего велосипеда проще сделать для классов общий интерфейс, а в векторе - шэрд пойнтеры. Если же надо данные хранить в векторе, то надо велосипедить что-то вроде:
Анончик, я тут читаю книжку про многопоточность и всё не могу понять, нужно ли блочить мьютексы при простом чтении данных, например: http://pastebin.com/WEZPb1Xr
>>459276 Если ты во всех потоках только читаешь данные, то вообще лочить необязательно. Но учти, что запись может происходить где-то внутри, если ты работаешь с высокоуровневым интерфейсом. Так что без блокировки можно обращаться к данным только тогда, когда ты абсолютно уверен в том, что делаешь. Далее, в том же Qt, например, есть QReadWriteLock, который соответственно можно лочить на чтение, либо на запись. Причем на чтение могут лочить сколько угодно потоков одновременно, а на запись. разумеется, только один. Это так, для справки.
>>458527 да, сегодня норм грузится, 1.5-2 секунды на нулевую
> Я вот что скажу, у нас с тобой разные взгляды на то, как все должно быть устроено. ты свалил кучу разного функционала в один проект, хотя он просто разбивался на небольшие модули. и, о чудо, добрая половина этих модулей уже существует в виде библиотек
> Какие две вещи? Приложение получает запрос, обрабатывает его, отдает ответ. Что с чем смешано? ты, видимо, никогда не пользовался веб-серверами дальше простейшего сервинга статики веб-сервера реализуют за тебя дохуища логики и делают это обычно в разы быстрее нежели ты руками а еще, несколько процессов не могут слушать вместе волшебные 80 и 443 порты
итак, основные поинты: - сервер сервит не только твою борду - если твоя борда упадет сервер ее перезапустит (можно, конечно, monit на процесс повесить) - овер дохуя всего, чего ембед сервера не умеют (потому что нахуй они не нужны такие жирные). взгляни хотя бы на вики по lighthttpd: http auth, url rewrite (тебе, так то, не нужен), ssl/tls, статистика, ssi, подробные логи, gzip встраиваемые веб-сервера нормально подходят для внутренних микросервисов и железок типа роутеров, встраивать вебсервер в обычный веб-сайт не оправдано ничем, ты просто выкидываешь многолетний опыт и накопленные возможности ради мифической скорости, кажущегося KISS/YAGNI/эназа_модная_аббревитура. особенно, учитывая, что твой подход требует больше кода
> Теперь я знаю, из-за кого веб стал таким говном. веб-стек всегда был говном. желание перенести с сервера на клиент большую часть того, что может делать клиент сам - абсолютно нормально и, более того, практиковалось всегда и везде. речь не идет о том, чтобы валидацию, например, убрать с сервера. локализовывать на сервере нужно контент, чтобы поисковики нормально работали, а у тебя локализовывать нечего.
> Никаких проблем нет, все прекрасно работает. ты количество кода для этого "прекрасно" видел? и я не хочу никого обижать, но все это на уровне основной массы php3 из нулевых
посмотри на вещи следующим образом: борда - интерфейс к данным с некоторым шаблонизатором задача твоего кода конвертировать данные, что прислал двачующий, в данные в формате базы и обратно. и только. пик тотали рилейтед ОТКУДА ТАМ, БЛЯДЬ, СТОЛЬКО КОДА?
Как передать массив в функции rec и nerec, не используя глобальные переменные? TForm1 Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
{ int rec(int, int, int); int nerec(int, int, int); int key = StrToInt(Edit1->Text); int first=0,last=9; switch(RadioGroup1->ItemIndex){ case 0: Edit2->Text=FloatToStrF(rec(first,last,key),ffFixed,8,0); break; case 1: Edit3->Text=FloatToStrF(nerec(first,last,key),ffFixed,8,0); break; } } int a[10]={1,2,3,4,5,6,7,8,9,10}, p=a; int nerec(int first, int last, int key) {
while (first <= last) { int mid = (first + last) / 2; if (key > (p+mid)) first = mid + 1; else if (key < (p+mid)) last = mid - 1; else return mid; } } int rec(int first, int last, int key) { if (first <= last) { int mid = (first + last) / 2; if (key == (p+mid)) return mid; else if (key < (p+mid))
>>459337 >да, сегодня норм грузится Я же говорю, это ссаная флара. Отключил и все нормально. Я же не платил им, видимо для халявщиков скорости урезаются. >разбивался на небольшие модули Но зачем? Чтобы ебаться с их настройкой и состыковкой воедино? >добрая половина этих модулей уже существует в виде библиотек Например? >веб-серверы Ой все. https://ololoepepe.me/files/nginx.conf (Да, это не что-то супер-крутое, но я хочу сказать, что представляю, для чего нужны веб-серверы.) >абсолютно нормально Желание то нормально, но юзеру от этого не легче. Не слишком приятно с мобильного интернета открывать страницы, грузящие сотни килобайт JS-зависимостей. Каждый килобайт на счету. Это вы там в своих московиях зажрались, а у нас, замкадышей, все еще каменный век. >количество кода Почему тебе так НЕПРИЯТНО от этого? Я правда не понимаю. Не 100к строк же, всего около 20 вместе с шаблонами и скриптами, это очень мало по сравнению с нормальными проектами. >но все это на уровне основной массы php3 из нулевых Г-споди, да любой бэкенд на том же уровне. Все что нового придумано - клиент-сайд скриптоговно и красивые кнопочки. Сервера как обрабатывали запросы 10 лет назад, так и сейчас обрабатывают, что там нового то изобретать? >задача твоего кода конвертировать данные, что прислал двачующий, в данные в формате базы и обратно. Так я больше ничего и не делаю. Только конвертировать нужно разные данные, разными способами, так код и растет. Ну и бойлерплейт. Кресты в этом плане не далеко от жабы ушли по выразительности и лаконичности, щито поделать.
>>459424 Это мне уже говорили. Но как мне, например, объявить массив в той же форме баттонклик и затем передать его в функции рек и нерек? Или это вообще как-то иначе нужно сделать?
>>459473 Ты можешь просто обьявить массив как int a[10]={1,2,3,4,5,6,7,8,9,10} внутри своего Button1Click В обьявлении функции добавь к примеру вот такой параметр int* a (Получаешь указатель на первый эл-т массива, он в С одновременно является и началом массива) и int size (размер массива чтоб знать сколько в нём эл-тов, ну в твоём случае будет 10 всегда, можешь и без этой переменной.
В этих функциях работаешь с ним как с обычным массивом.
Только ты должен понимать что в таком случае ты создаёшь массив на стэке каждый раз при вызове функции Button1Click и как только закрывается скобка } (Закончится эта функция) - можешь считать что этот массив в памяти уничтожен. Пользоваться ссылками или указателями на него нельзя.
Антоны, спасите помогите. Я всю голову сломал об этот модифицированный метод эйлера. Научил его считать корень в одном узле но только при первом приближении, т.е. когда первый раз делю шаг на два. Ок. Но на всем остально отрезке выдает нули т.к. после этого самого профитного идут одни нули Прошу помосчи http://pastebin.com/GfwtpkeC
Если с/с++ умрет, то на какой язык все перейдут? вот сам считаю, что никогда не умрут эти два языка (особенно С), но вот уже 2 дня мучает этот вопрос мимо не-java-php-c#-пидор
>>459425 > Каждый килобайт на счету. > ходить на имиджборды, где на глагне сплошные картиночки проиграл отрендерил в <pre>, асинхронно прогрузил prism.js 9.6kb, применил и все довольны хотя, ладно, в целом, ничего плохого в gnu source hightlight на сервере не вижу
> location /board/ { > proxy_pass http://192.168.0.2:8080/; ну и нахуя, тебе полноценный встроенный http-сервер в приложение, если у тебя и так уже nginx есть? получается же хттп-сервер => хттп-сервер => сама борда, дублируешь работу же
> Сервера как обрабатывали запросы 10 лет назад, так и сейчас обрабатывают, что там нового то изобретать? php3 здесь как пример каши из шаблонов, логики и доступа к данным твои сырцы не смотрел почти, ничего сказать не могу сейчас у всех на бекенде модульность, сервисы, микросервисы и вся ткакая ебала. все хотят иметь возможность взять свою борду, выкинуть 2к строчек прослойки хттп<==>сервис, написать прослойку смтп<==>сервис и двачевать через почтовый клиент
> Так я больше ничего и не делаю. > всего около 20к вот от этого пичот, это и есть единственная проблема, которую я вижу, на самом то деле
> Кресты в этом плане не далеко от жабы ушли по выразительности и лаконичности, щито поделать. у тебя какие-то другие кресты и какая-то не та жаба
>>459588 >>459590 1) я поделил промежуток и в фор считаю корень в каждом из них 2) Решить Оду dy/dx=(y-1)/(x+1) y(0)=0 извините что долго, провайдер решил что мне хватит нефти
>>459564 >Code::Blocks А это что такое. Гуглить не буду, всё равно ничего не пойму. Расскажите про свои ощущения от пользования, что это, зачем и почему.
>>459621 Все хуйня это, не юзай иде в начале пути. Изучи какую-нибудь систему сборки и юзай её + модный редактор забываю только что написанные функции хедера, при переключении в cpp файл
>>459634 Даже небо, даже аллах! Хоть сейчас появляется тенденция писать на всяких JS и прочем, но в основе этого говна всегда лежит C++. Никуда от этого не деться.
>>459620 Бля, я про тебя уже и забыл, мне впадлу разбираться в этой куче кода, поэтому держи набросок на коленке. Проверил матлабом, вроде бы, работает: http://pastebin.com/jDChREDM
>>459659 В твоём коде происходит что-то странное с сеткой и её шагом, здесь же сетка фиксирована, как и предполагается в этом методе. Пара советов: 1. Читай внимательнее свой код 2. Обзывай переменные как-нибудь внятно, а не a, b, h. 3. Операторы +-*/= бывает полезно разделять запятыми, так код бывает читать проще. 4. Объявляй и инициализируй переменные тогда, когда они действительно начинают использоваться, а не в самом начале.
Я тут пытался запилить двусвязный список, дошел до пункта обмен двух элементов местами, тут вроде бы все очевидно, поменять стрелочки местами, но тут я столкнулся с ситуацией, когда эти элементы - соседние. Как грамотно реализовать свап без всяких проверок на соседство, разных случаев итд?
Анон, поясни как работает vector в связке с нестандартными классами. То есть, у меня есть желание запилить вектор из элементов не стандартных типов, а описанных мной же классов. Но оно пишет что такое нельзя сделать, ибо нет метода с такими аргументами. Мне забить на вектор и юзать что-то другое, или есть способ совладать? Какой?
>>459722 [code] class line{ ... } class text{ std::vector<line> entireText;
public:
text(line);
}
text::text(line lineToAdd){ entireText.end(lineToAdd); } [/code] Выдаёт ошибку, говорит, мол, нет перегрузки с такими аргуметами. И да, я что, разве могу прилепить в стд свой метод с шаблонами?
>>459721 Нет, лол, нихуя не отбой. [code] class line{ ... } class text{ std::vector<line> entireText;
public:
text(line);
}
text::text(line lineToAdd){ entireText.insert(entireText.end(), lineToAdd); } [/code] Теперь, после выхода из конструктора с параметрами вылезает рантайм эррор. ЧЯДНТ?
>>459611 >проиграл Хоть запроигрывайся, а картинки вообще-то можно отключать. И весят превью 5-6 КБ, а всякое жуйкуери и другие приблуды в сумме до сотен доходят. Это штук 20 картинок - считай, вся нулевая. >ну и нахуя Потому что завтра мамка выкинет мой сервер в коридоре, а настройки nginx я с горя забуду, но борда продолжит спокойно себе работать на рабочем компе, потому что не зависит от этого. Про мамку шутка конечно, но, думаю, кейс понятен. >модульность, сервисы, микросервисы и вся ткакая ебала Баззворд на баззворде. У меня просто немного другая архитектура, другая декомпозиция. Модули так или иначе поддерживаются в виде плагинов: фабрика р(о)утов и фабрика досок. Просто не вижу смысла базовую функциональность типа отдачи статики в плагин выносить, поэтому она сразу в коде идет. >код Ну ничоссе. Я тоже могу написать [code lang="cpp"] dispatcher().assign("/create_post", &ThreadRoute::handlePostCreation, route, 1, 2); [/code] Даже короче получилось (так оно в коде и есть, тащем-то, только для общего случая разного количества аргументов). Только вот ни у меня, ни у тебя не описана в примере логика проверки капчи, валидации других параметров, обращения к БД, рендеринга страницы с ошибкой, наконец. Так что не надо тут.
>>456723 няши, помогите пожалуйста решить задачку, ну или хотя бы подскажите алгоритм. В массиве А(N,M) расположить элементы каждой строки в порядке убывания, а сами строки расположить в порядке возрастания сумм их элементов. Указатели на строки.
>>459964 Нет, он годный кун. Запилил юзерскрипт, который чинит [code][/code] тэг. Я у него на Github нашел кучу Qt репозиториев. Довольно интересные программы, поэтому и интересуюсь непосредственно у него.
>>459965 Ну бля, что ж ты намеков то не понимаешь, не надо из меня неймфага делать. Почта же есть, если уж сильно надо, ну.
Бланшет, Саммерфилд. Еще Шлее. У них учебники. Но мне не понравилось, например. Я делал так: брал задачу (на тот момент хотел запилить скачивание картинок с тредов, такой специфический менеджер закачек), пытался сделать, смотрел примеры, гуглил и т.д. Код получался ужасный, но со временем появлялся опыт и код становился лучше. На практике приобретаются знания и навыки, которые никакой учебник не даст. И еще, очень хорошо будет взять какой-нибудь проект, скажем, в вузике (если ты студент), или даже просто знакомым что-то запилить. Похуй что бесплатно. Ответственность минимальная, но она есть, и это мотивирует, также как и то, что твое поделие кто-то использует, находит баги, реквестит фичи и все такое. Для карьерного роста пользы почти нет, для профессионального - очень даже.
>>459968 Да мне просто надо к четвергу запилить GUI. Вернее как. Мой воображаемый дедлайн и тз требуют запилить программку для вузика охуенно, но на деле надо показать довольно простую хуйню.
Надо сделать два окошечка - пикрелейдет. Первый пик: Основнок окно. Надо запилить несколько вкладочек, в которых отображать информацию. Достаточно будет тупо текст, на крайний случай таблицы. Туда вся информация должна выводиться.
Второй пик: Заполнение матриц. Первые два квадрата - две матрицы(т.е. таблицы, которые можно заполнить). Неплохо было бы запилить ресайз. Последняя колонка всякие конфиги и кнопочки. Тыкаешь кнопку start, и gui сбрасывают в соснольку данные, которая вычисляет и отсылает данные обратно в stdout. Gui парсят ответ и вкидывают пользователю окошечко с полученным результатом.
>>459978 >>459979 Весьма тонкий реквест "сделай мне лабу". Но хуй с тобой. >несколько вкладочек QTabWidget >тупо текст QPlainTextEdit >таблицы QTableWidget >ресайз Если ты о ресайзе элементов окна (виджетов), то QLayout и производные от него. Если о ресайзе таблицы, то QTableWidget::setRowCount, QTableWidget::setColumnCount (но, насколько я помню, там еще надо будет в пустые клетки запихать виджеты, лучше погугли). >всякие конфиги QFormLayout в помощь. >кнопку start Хорошее решение - QDialogButtonBox внизу, на который уже добавляются кнопки QDialogButtonBox::addButton. >Не видел почты, извиняюсь. Посмотри в любом README на гитхабе (ну кроме MakabaCode, там не указывал его).
>>456723 Внутри QMainWindow есть QWidget (на кртинке справа), в нем находится QGridLayout (в котором все эти спинбоксы и пара кнопок). Как сделать так, чтобы он притягивался к верхней грани, а не к центру?
>>460042 Спасибо, работает. Но почему такие костыли? Я думал все должно быть проще, типа alignment или gravity какой-нибудь. Или это я что-то не так делаю и подобный элемент надо пилить по-другому?
>>459984 >Весьма тонкий реквест "сделай мне лабу". Но хуй с тобой. Было бы неплохо, если бы у нас в вузе были бы лабы по программированию. Было бы неплохо, если бы у нас в вузе объясняли Qt. Было бы неплохо, если бы мы писали на крестах.
Олсо, звучит все дохуя сложно. Именно таблицы, особенно. Буду гуглить и доебываться в треде.
>>460046 Это в ваших говно-хтмлях костыли типа alignment'а, в результате чего в 2015 году нельзя нормально произвольный элемент горизонтально выровнять иначе чем с помощью deprecated-тега <center>. А у нас в Qt все именно так, как и должно быть.
>>460076 >Было бы неплохо, если бы у нас в вузе были бы лабы по программированию. У нас были, но на дельфи, уровня "накидай на формочку элементы". >Было бы неплохо, если бы у нас в вузе объясняли Qt. У нас не объясняли. >Было бы неплохо, если бы мы писали на крестах. Все писали на дельфи, я писал на крестах. Недавно на госах: - Так, Бов, готов? - Готов! - Да ты, Бов, всегда готов, можно и не проверять.
Это я к чему: сам учиться не будешь, никакие вузы тебя не научат. Ну и похвастаться какой я у мамы молодец, че уж там.
>>460091 Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
>>460090 Но я не знаю html! А gravity это из ведроида. Ведь это было бы более естественно, задаешь куда оно примагничивается, а не создаешь целый новый слой только для того, чтобы он выравнивал куда тебе надо. Да еще и такой непонятной функцией, как addStretch. Если бы я читал такой код, то захотел бы настучать программисту по башке за то, что названия функций не соответствуют тому, что они делают.
>>460098 >ведроида Сначала не хотел дальше читать, но потом прочитал, и понял, что не зря не хотел. Изучи для начала доки, туториалы, потом уже высказывай мнение, ну. "Не как на ведроиде" - это скорее комплимент.
>>460101 >Изучи какие охуенные мы делаем костыли вместо того, чтобы по-человечески выравнивать элементы. Ну объясни мне, умник, каким образом addStretch() связана с выравниванием и как я об этом должен догадаться?
>>460103 Читать документацию надо, и все будет понятно. addStretch добавляет элемент-спэйсер, это удобнее alignment'ов и gravity. Шел бы ты на свой андроид, раз не нравится.
>>460114 >Если ты привык к чему-то это не значит, что это единственно верное и истинное решение. >Ведь это было бы более естественно, задаешь куда оно примагничивается, а не создаешь целый новый слой только для того, чтобы он выравнивал куда тебе надо. Понятно.
Вопрос на миллион. Как конвертировать std::vector в std::vector<std::vector> ? Т.е. как преобразовать обычный вектор в двумерную матрицу. Олсо программа должна работать с квадратными матрицами, но надо бы проверочку запилить. Сейчас я застрял на вопросе - как определить, можно ли вектор преобразовать в квадратную матрицу. Например, если std::vector.size() = 9, то надо построить матрицу 3х3, но если равно, например, 8, то нужно выдать сообщение об ошибке(?)
>>460159 Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
>>456723 няши, подскажите способов как можно обратиться к элементам динамического двумерного массива)) и скажите , можно ли обращаться к элементам такого массива таким образом: ((arr+i)+j)?
>>460188 Я вообще боюсь скринов с++. Но даж мне очевидно, что ошибки тебе студия написала прямым текстом. И да. Перепиши. В таком говне и 10 скобочек можно проебать.
> Модули так или иначе поддерживаются в виде плагинов: фабрика р(о)утов и фабрика досок. странная у тебя какая-то декомпозиция я бы сказал что ее нет, все пермешано и перепутано есть же проверенная десятилетиями схема: дал(база, фс) <=> сервис("бизнес логика") <=> вью(хттп а твоем случае)
да еще и на каждый раздел по классу, ну что это за говно?
> dispatcher().assign("/create_post", &ThreadRoute::handlePostCreation, route, 1, 2); и нихуя не понятно без контекста, что в handlePostCreation такого, что не поместится в 5-10 строк лямбды? какого хуя тут делает какой-то тред? я хочу писать как в синатре, епт, чтобы все было просто и понятно, чтобы прочитать код мог даже человек с трудом понимающий кресты да и руби тоже get '/b' { return "wakaba has you, " + params[:username] }
и одиннадцатые кресты это позволяют и им уже, на секундочку, 3.5 года
и никакие оправдания про еблю байт и скорость тут не подходят, ты QString'и конкатенируешь, там malloc вызывается чаще, чем в бэ рулетки крутят, ты в sql базу лезешь (хоть и маленькую и быструю), ты используешь ORM
> логика проверки капчи > валидации других параметров сервис проверит и кинет эксепшн. хотя проверять там кроме капчи нечего
> обращения к БД а что там делать то, тем более с орм?
> рендеринга страницы с ошибкой нинужно, верхний уровень поймает эксепшн на уровне раута и скажет, что хочет 500, остальное сделает, например, тот же nginx
я все еще не могу понять откуда там СТОЛЬКО кода, в том же sqlite небось раз в пять всего больше любую твою функцию в 50-100 строк можно сделать размером в два-три-четыре раза меньше половину классов и методов выкинуть нахуй и вообще урезать всю борду (даже с ембедед хттп сервером и сервер-сайд подсветкой) до 5к. без ущерба функциональности и читаемости хуже ее здесь не сделать, ящитаю, я минут десять бродил по репе в попытках понять, что же от чего зависит и кем вызывается
Есть 1 класс с чисто виртуальным деструктором и чисто виртуальной функцией, класс этот экспортируется из dll Когда я наследуюсь от него, то получаю 4 link2019 на дефолтные конструкторы\операторы присваивания и на деструктор. Что я делаю не так? обоссыте, но не выгоняйте алсо, интерфейс и класс его реализуемый лежат в двух разных dllaх
1. не используй, блядь, *(arr + i) нотацию 2. не используй, блядь, динамические массивы динамических массивов, если точно не уверен, что надо 3. не используй, блядь, транслит 4. называй, блядь, переменные нормально
>>460229 > чисто виртуальным деструктором не должно быть такой хуйни, вообще у всех родителей всегдаопустим всякие ебнутые ситуации вызывается деструктор, а это значит, что он обязан быть даже в "интерфейсах" оптимизатор его, кстати, все равно вырежет нахуй, так что можешь не беспокоиться
>>460248 Знаю про эту хуйню, не знаю почему написал. В общем проблема осталась >>460249 Только что проверил - нету никакой реализации >>460238 Первая ссылка предлагает сделать мне Construct & Release методы - мне это не нужно Ну так почему же вот тут все нормально и ожидаемо ? >>460237 алсо, вот щас вынес деструктор помеченный макросом экспорта в cpp файл и все заработало. Почему это произошло?
>>460259 >В общем, проблема осталась Снята проблема, но осталась старая и поднята новая >Почему вот тут все нормально и ожидаемо ? >>460237 >вынес деструктор помеченный макросом экспорта в cpp файл и все заработало. Почему это произошло?
Бляяядская макаба стерла мой сраный пост! Ещё раз.
Есть json файл, который содержит кучу объектов, каждый из которых имеет два массива и одно число. Этот файл подается на вход программе и должен быть обработан.
1. Паринг json файла. Входные данные я преобразовываю так: массивы => vector, int => int. Полученные вектора отправляю в списки. Вот так я храню их, своего рода очередь.
struct Queue { std::list<std::vector<double> > matrixA; //список с первыми матрицами std::list<std::vector<double> > matrixB; //список со вторыми матрицами std::list<int> precision; //список чисел unsigned int taskNumber=0; //количество задач всего. }QueueObj;
Тут возникают сразу же проблемы. Если входных параметров очень много, то жрет дохуя памяти. Олсо только он начинает вычислять, то потребляемая память падает во много раз. Стоит ли просто читать файл частями? Или вовсе начать читать файл каждый раз, когда нужно выполнять следующую задачу?
2. Вот дальше самый пиздец. У меня есть класс, который вычисляет нужные мне значения. То есть есть класс MyClass, который принимает параметры на вход и предоставляет всякие интерфейсы для управления им.
В итоге я пишу что-то вроде
for (int i = Queue.taskNumber; i > 0; --i) { /iShit - итераторы списка. MyClass newTask(iPrecision, buffer, iMatrixB);
newTask.run();
std::vector<double> out = newTask.result();
for (size_t i = 0; i < out.size(); ++i) std::cout << out << std::endl; }
Я так понимаю, что глупо плодить объекты на каждую задачу? Или вполне нормально, если вычищать их вовремя?
3. Многопоточность. Какие варианты реализации возможны? Я, например, хотел бы сделать отдельный поток, который вычисляет всю парашу, а второй поток общается с первым и примерно сообщает о количестве выполненных операций.
>>460277 Создаешь класс/структуру для представления объекта - в нем два вектора и число. В одном потоке открываешь файл и читаешь-создаешь по очереди объекты и ложишь их в очередь. Выбираешь какой-то граничный размер очереди, если в очереди находится больше объектов то приостанавливаешь поток на несколько миллисекунд, смотря сколько твои объекты нужно обрабатывать и какой размер очереди (это чтобы очередь не разрасталась до огромных размеров). В другом потоке вытаскиваешь объекты из очереди и обрабатываешь их. В зависимости от характера работы над объектами и системных ресурсов объекты можно вытаскивать и обрабатывать в несколько потоков - конкретное эффективное количество потоков завист от системы, больше не обязательно лучше. Алсо очередь это оперции enqueue и dequeue, то что ты там накалякал это массив. Если будешь делать многопоточность то нужна блокировка на доступ к очереди (это сильно замедлит работу, если объекты обрабатываются быстро) или нужна потокобезопасная неблокирующая очередь.
>>456723 >"Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Не идут. Держите платиновые вопросы:
1) Как проверить существование директории КРОССПЛАТФОРМЕННО?
2) Как создать директорию КРОССПЛАТФОРМЕННО?
Т.е. никаких вин-апи и прочего. Нужно, чтобы под линуксом, бсд и виндой код работал. Чтобы вы понимали, что вопрос вполне разрешим, приведу пример КРОССПЛАТФОРМЕННОЙ проверки существования файла на C++11 в одну строчку:
>>460354 >ложишь их в очередь. Я короче погуглил и нашел std::queue. Пойдет в качестве альтернативы.
Олсо, как писать в очередь? Предположим, что у нас очередь 10 записей. Программа отработала с 5 объектами, очередь нужно пополнить. Как туда это записывать, чтобы все вычислялось правильно?
Теперь за потоки. Как не обосраться? Ведь два потока будут работать с одной очередью, а значит, что один может без проблем прочитать недописанные данные. Как этого избежать? Блокировать очередь на время пополнения, потом блокировать её на время чтения?
>>460383 > Олсо, как писать в очередь? Не совсем понятно что тебя смущает. Поток смотрит на размер очереди. Если она больше чем 20 (например) поток засыпает на 1 (например) миллисекунду, если меньше, читает из файла следующий объект и ложит его в очередь, потом все повторяется.
>>460406 Так-с. С deque я вроде бы немного разобрался. Теперь как сделать все по уму? Мне в голову пришла мысль написать класс Queue, что-то типа такого:
[code lang="cpp"] template <typename T> class Queue { private: std::deque<T> deque; public: void push(T const& value); T pop(); }; [/code]
И, например, в функции main открывается первый поток, который создает объект типа Queue и начинает оттуда читать данные. А в основном потоке мы просто храним ссылку на этот же объект, и читаем оттуда. Функция pop возвращает нужную нам структуру обратно и подчищает список. Ну и в этих функция реализован механизм блокировки потоков.
Ну и ясное дело, что теперь нужно эту очередь заполнить. Пока что запилил отдельный thread, который этим дерьмом занимается, но тут же лютый обосрамс, блядь. Вот блядь очевидно, что нужно просто передать этот злоебучий объект по ссылке.
>>460721 Во-первых, как правильно заметил >>460733, твой способ говно. Во-вторых, тебе же не файл надо проверить, а папку. Если совсем уж впадлу использовать библиотеку богов, то хоть посмотри исходники упомянутых мной методов и спизди их.
>>460592 Все говно аноны, я починил эту парашу, но это говенная реализация. Пока пердолился, нашел producer-consumer паттерн, но на крестах нет, только на C. Но реализовать дико хочется.
Мультитрединг это так охуенно. Сука! Но страданий дохуя.
Олсо, поясните за строчку:
[code lang="cpp"] this->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); }); [/code] Что тут вообще происходит? Ну я знаю, что это ламда функция, которая возвращает указатель(?). А что дальше происходит?
Ещё охуительный вопрос. Мой люкссофт создает 3 матрицы и 1 число, которое нужно поместить в документ .tex. Ясно дело, что там должны быть и другие данные. Типа заголовок, настройки файла и т.д. Какие способы писать в файл есть? Сейчас я просто топорно пишу нужные мне строки в пустой файл.
>>460776 >Ну я знаю, что это ламда функция, которая возвращает указатель(?). Проиграл с тебя. Она возвращает true, если очередь не пуста, и false, если пуста. Соответственно, если возвращается false (очередь пуста), то блокировки не происходит.
Хочу для души попрогать на крестах. С последним стандартом, с бустом, со всеми прикольными штуками, короч. Что мне надо накатить? (Желательно, для винды)
>>460985 Потому что буст - некрасивое говно. Но для данного случая вообще похуй откуда брать исходники, так что хоть из wxWidgets, если так нравится кушать какашки.
>>456723 Не буду пинать труп Qt-треда, спрошу здесь: Допустим, у меня есть QGrphicsScene, в которой лежит несколько айтемов, один из которых QGraphicsPixmapItem. Есть ли в Qt стандартные способы узнать в какой из пикселей этого пиксмапа я тыкнул мышкой, учитывая что этот айтем может менять масштаб (setScale()), а сцена лежит в QGraphicsView, который в свою очередь имеет скроллбары.
>>461011 Можно, но ебано весьма. Сначала определяешь, по какому итему тыкнули, потом находишь его координаты во вьюхе с учетом всяких скроллбаров (вроде видимая часть называется вьюпорт, вот относительно него надо высчитывать), потом сравниваешь с точкой, куда ткнули. Естественно, учитываешь масштаб (алгоритм сам придумай, там несложно, но мне лениво).
>>461013 Ок, спасибо. Я тут подумал, наверное лучше будет наследоваться от QGraphicsScene и перехватывать всякие QGraphicsSceneMouseEvent. В них вроде есть вся инфа (pos, scenePos, screenPos). Но это опять же куча гемора.
>>461018 Используй QObject::eventFilter, нахуя от сцены то наследоваться. В любом случае тебе придется вычислять все мной выше перечисленное, способ перехвата события нажатия мыши с вычислением никак не связан.
{ //Нахуя эти скобочки? //Выжидаем, когда mutex разлочится и залочить его самостоятельно. std::unique_lock<std::mutex> lock(this->d_mutex);
//Залочили и пишем в очередь. newQueue.push_front(value); } //Сообщаем ожидающему треду. this->d_condition.notify_one(); } T pop() { //Блочим mutex std::unique_lock<std::mutex> lock(this->d_mutex); //Передаем его в wait, который высвобождает mutex и приостанавливает поток, пока условие не будет выполнено. this->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); }); //копируем T rc(std::move(this->newQueue.back()));
>>461209 >Нахуя эти скобочки? Блок в скобках - скоуп. Когда выходим из скоупа, все что в нем объявлено на стеке - удаляется. То есть будет вызван деструктор переменной lock и она больше не будет доступна. btw, лок это нечто типа паттерна - объект, лочащий мьютекс и разлочивающий при разрушении. Удобно, когда неизвестно, где будет выход из скоупа. В данном случае - варварский костыль, здесь бы хватило и простого лок\анлок.
>>461247 >Передаем его в wait Ты лок передаешь туда, а не мьютекс. И еще, я тебе уже писал, но ты в глаза ебешься: >Еблан что ли? Доки читай http://www.cplusplus.com/reference/condition_variable/condition_variable/wait/ >Если предикат вернет false, блокировки не произойдет. Нихуя оно не ждет. >Нихуя оно не ждет. Предикат выполняется сразу при вызове wait, и в зависимости от него wait либо будет ждать, либо моментально разлочит мьютекс. Далее. >std::move Гугли lvalue, rvalue. Если сложно, то забей пока на это байтоебское говно, оно в 99.99999% задач нахуй не всралось. А вообще у тебя какой-то говнокод, но это с опытом приходит, ничего.
>>461256 >Ты лок передаешь туда, А что такое lock по своей сущности, лол?
Да я весь вечер охуваю. Сначала писал, вроде бы, нормально получалось. Лег спать. Открываю с утра - ЛЮТЫЙ ГОВНОКОД. Сегодня дописывал - плакал. Надо будет зарефакторить.
>>461261 >А что такое lock по своей сущности, лол? Ну пиздец, ты читаешь вообще ответы, нет? >btw, лок это нечто типа паттерна - объект, лочащий мьютекс и разлочивающий при разрушении. Обертка над мьютексом это. Если ты передашь его в wait, то сначала соответствующий мьютекс разблочит wait, а потом его попытается разблочить сам лок при выходе их скоупа, и твоя параша весело наебнется.
>>460999 1) Таки я не понял, >Разве твой костыль не наебнется на проверке существования файла который закрыт для записи?
Наебнётся мой костыль или нет? Не должен же: я проверяю, имеется ли возможность открыть файл на чтение. На мой взгляд, это равносильно проверке на его существование.
Можно ли туда писать или нет, меня не интересует. Меня интересует, существует файл или нет.
2) Хорошо, хочу спиздить исходники. Помоги дауну в этом. Вот имеется код.
>>461448 >я проверяю, имеется ли возможность открыть файл на чтение. На мой взгляд, это равносильно проверке на его существование. Не равносильно. Файл может существовать, но у тебя при этом может не быть прав на его чтение. Хотя вряд ли сперморебенок с таким сталкивался. >Что нужно вообще спизидить? Как спизженное будет выглядеть целиком? Неудивительно, что ты не нашел, там гора кода, много обращений к внутренним классам и тд. Так что походу не проктит. В гугле за первую минуту решения я тоже не нашел. Так что или кури доки по всем платформам и пиши велосипед, или пытайся гуглить с призрачной надеждой на успех, или кончай страдать хуйней и используй предназначенные для этого инструменты.
>>461481 ...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards
Поймите и примите как факт, что наделаете ошибок. Задача в том, чтобы найти их рано, пока они не попали в продакшн. Слава богу, в нашей индустрии, за исключением ребят из Лаборатории реактивного движения НАСА, которые делают софт для управления ракетами, ошибки обычно несмертельны. Мы можем и должны учиться, смеяться и продолжать работу.
Ваш код — не вы. Помните, что вся суть проверки кода в том, чтобы найти ошибки, и они обязательно найдутся. Не воспринимайте как личное оскорбление, когда это случится.
Не важно, насколько вы прокачанный спец. Кто-нибудь всегда знает больше, и у него можно поучиться. Стоит только попросить. Ищите и принимайте то, что говорят другие, особенно когда кажется, что это вам не нужно.
Не переписывайте код без консультации. Есть тонкая грань между «поправить код» и «переписать код». Почувствуйте разницу и преследуйте изменения стиля в рамках штатной проверки кода, а не как одинокий рейнджер.
Относитесь к людям, которые знают меньше вас, с уважением, почтением и терпением. Люди, напрямую не связанные с IT, но которым часто приходится иметь дело с разработчиками, считают нас в лучшем случае зазнайками, а в худшем — нытиками. Не кормите стереотипы гневом и нетерпеливостью.
Единственное, что в мире постоянно — это перемены. Будьте готовы к переменам и принимайте их с улыбкой. Взгляните на изменения в требованиях, платформе или инструменте как на вызов, а не как на неудобство, которое надо побороть.
Единственный истинный авторитет дают знания, а не положение. Знание порождает авторитет, а авторитет порождает уважение. Хотите уважения в среде, где нет места эго — культивируйте знания.
Боритесь за то, во что верите, но непринужденно признавайте поражение. Поймите, что иногда ваши идеи будут отклонять. Даже если вы и правы, не надо мстить и говорить «А я предупреждал, что так будет». Никогда не превращайте отвергнутые идеи в мученический стон или боевой клич.
Не становитесь «тем кодером в углу». Не будьте человеком в темном кабинете, который выходит только за колой. Кодера в углу не видно, с ним сложно связаться, его сложно контролировать. У такого человека нет голоса в открытой, кооперативной среде. Включайтесь в беседы и будьте частью сообщества своего офиса.
Критикуйте код, а не людей. Будьте добры к людям, но не к коду. Насколько возможно, пишите позитивные комментарии, направленные на улучшение кода. Свяжите комментарии с принятым в команде стандартом кода, техзаданием, повышением производительности и т.д.
Поймите и примите тот факт, что наделаете в разы меньше ошибок, чем те дауны-ньюфаги с анонимного форума. Задача в том, чтобы обоссать их рано, пока их не взяли на работу. Слава богу, в нашей индустрии, за исключением ребят из 10Б, которые делают софт для сжатия интернета до размеров одной флешки, ошибки стоят денег и проебанного времени пользователя. Мы можем и должны учиться, смеяться и продолжать обоссывать даунов.
Ваш код - это вы. Помните, что вся суть проверки кода в том, чтобы найти ошибки, и они обязательно найдутся. Воспринимайте как собственную некомпетентность, когда это случится.
Не важно, насколько вы прокачанный спец по нытью на сосаче. Любой ваш одногруппник знает больше, но учить он вас не будет. Не стоит даже просить. Ищите и принимайте то, что пишут в гугле, особенно когда кажется, что проще спросить на сосаче.
Переписывайте код без консультации. Есть тонкая грань между "писать код" и "ныть на сосаче". Почувствуйте разницу и пойдите уже работать над проектом, а не засоряйте доску своими даунскими вопросами по синтаксису.
Относитесь к людям, который знают больше вас, с уважением, почтением и терпением. Люди, напрямую не связанные с IT, но которым часто приходится иметь дело с разработчиками, являются тупыми гуманитариями и могут сосать хуй, их мнение никого не интересует. Кормите их говном и сажей.
Единственное, что в мире постоянно - это ежедневный прирост числа дегенератов. Будьте готовы к наплыву дегенератов и принимайте их с сажей. Взгляните на деградацию доски, вопросы по синтаксису и "как взломать вконтакте" как на вызов, а не как на неудобство, которое надо побороть.
Единственный истинный авторитет дает опыт написания программ, а не кукареканье о кластерах метапарадигм. Написание программ порождает уверенность в своих силах, а уверенность порождает спокойствие. Спокойствие в среде, где полно мамкиных тралей - залог здоровья вашей жопы.
Боритесь за чистоту доски, но непринужденно признавайте поражение от тупости вашего оппонента. Поймите, иногда дауненок просто не способен понять написанное и пытается перевести беседу в тралинг. Даже если вы и не правы, все равно обоссыте ущербного - для профилактики. Никогда не прекращайте окроплять уриной ротешники неофитов.
Не становитесь "тем кодером в углу". Вы уже давно им стали. Не будьте человеком в темном кабинете, который выходит только за колой (ведь можно заказать колу прямо в кабинет). Кодера в углу не видно, с ним сложно связываться, его сложно контролировать. А нам только этого и надо. У такого человека нет голоса в открытой петушиной среде, но все равно чуть что все бегут к нему. Игнорируйте социоблядей и ссыте на них.
Критикуйте и код, и людей. Будьте добры к людям, но не к дегенератам. Насколько возможно, пишите комментарии, отправляющие дауненка в гугл. Свяжите комментарии с принятым на доске стандартом унижать долбоебов, ебать их мамаш, сестер и т.д.
Анон с хуевой реализацией Producer–consumer вкатился снова. Я чуток приболел и поэтому вчера ничего не писал. В целом я ту программу закончил - она работает. Однако там поле не паханное - надо с памятью разобраться, реализацию паттерна заебашить хорошую, закомментировать все, добавить GUI и много ещё чего.
Однако разработка этой программы надоела. Стоит ли доводить проект до конца (новых знаний там прибавится более чем дохуя), либо браться за что-нибудь другое?
>>461878 Тут два стула. Либо ты бросаешь это говно и начинаешь что-то более полезное, либо доводишь до конца, несмотря на то что это бесполезный калич. В первом случае ты не тратишь время на ковыряние в говне, но привыкаешь забрасывать проекты, во втором - учишься доводить работу до конца, но занимаешься неинтересным и нинужным делом, что тоже хуево. Если же программа нужная и интересная, просто тебе лень - то тут без вариантов: только доводить до конца, иначе так и будешь факториалы всю жизнь писать.
>>461884 Ну программа нахуй никому не всралась даже мне, однако как я уже выше много технических деталей смогу из неё вытащить. Я сейчас поаутизировал и пришел к выводу, что нужно продолжать пилить её и использовать в качестве полигона для тестов всяких новых фич.
Олсо, поясните за чистку памяти. inb4: используй smart_ptr; Я как-то не особо понимаю, когда надо вычищать память, а когда нет. Есть какой-нибудь гайд?
>>461893 Ну я обычно стараюсь доделать хотя бы какой-то запланированный минимум, сильно задрачивать говно не стоит.
Память надо освобождать, когда она выделена в куче (heap), то есть при помощи new (malloc на рассматриваю, ибо байтоебское ненужное говно). Когда ты больше не используешь выделенную память (скажем, класс, который выполнял какую-то операцию, отработал), то надо ее освободить, то бишь вызвать delete. Умные указатели сильно упрощают задачу, но в сложных проектах там тоже могут возникать всякие нюансы, типа перекрестный ссылок (тут используют костыль под названием weak pointer). А вот что пишут на СО http://stackoverflow.com/questions/76796/memory-management-in-c Но по мне, так эта ебля с RAII - еще большие костыли, выразительность падает ниже уровня жабы (хотя казалось бы, как такое возможно).
>>461912 При чем тут -фоб или не -фоб? Зачем использовать буст с его уродливыми названиями и мешаниной нэймспейсов, если есть красивый и приятный Qt? Зачем ебаться с байтами, когда на дворе 2015 год, и даже самый обоссанный китайский телефон на порядок мощнее моего первого компьютера, тянувшего 3д игры на максималках в свое время? Это все просто нинужно в большинстве случаев. Но остается еще "меньшинство случаев", я прекрасно понимаю, что там это все может потребоваться. Но никак не в лаба_2.
>>462170 Поправочка: ничего не делающий и получающий за это какие-никакие, а копейки. Хотя скоро диплом, и отмазки больше не прокатят, но может что еще придумаю.
Вопросы за оптимизацию. Олсо, дедлай прошел, поэтому могу уже спокойно обмазываться и дописывать, как душе угодно. >>461910 – заставил задуматься. Почитал всякие доки и понял, что дико обосрался в одном месте. >>461916 – Я сейчас пишу в академических целях. У меня дико печет от того, что я не понимаю, как некоторые вещи работают, поэтому стараюсь писать настолько низко, насколько это понимаю. Но в тоже время чтобы это было интересно. Задача: На вход подается матрица, матрица, и число. На выходе должен быть сгенерирован файл в формате pdf с матрица, матрица, список, число.
Вопросов, конечно, ещё дохуя, но я самые такие базовые спрошу, которые не дают мне покоя. В частности прошу уделить дохуя внимания памяти, ибо я не все понимаю и чую, что где-то насрано. Также не надо писать "пиши на Qt", "smart_ptr" и тому подобное. Пока я хочу поебаться на некотором low-level, чтобы понять что к чему. Потом перепишу, а может быть и заброшу. Хуй знает.
Олсо, почему C такой популярный, а C++ не очень? Останусь ли я без работы, если буду ебаться только с плюсовыми фичами?
1. Моя программа течет, блядь. Она сжирает около 200 мб на 175 задач. Или это было на 100 000 задач, не помню. Что дохуя и меня дико раздражает. Каждая задача описывается 4 свойствами: [code lang="cpp"] std::vector<double> //чаще всего не больше 20 элементов std::vector<double>; //чаще всего 4 элемента. std::list<std::vector<double> > storedIterations; //обычно от 15 до 30 векторов по 3-4 элемента. unsigned int precision; //редко больше 15; [/code]
Естественно уж больно дохуя памяти выделается и программа работасет TO SLOW!!
Следовательно, есть ли смысл запилить шаблон для структуры? Задачи чаще всего приходят в формате int, реже в float. Double ещё ни разу не было. Вычисления же должны происходить довольно точно. Но редко в задаче устанавливаются слишком большая точность. 2. Задачи приходят из JSON парсера, который создает объект и тупо его перебирает, извлекая нужные значения в цикле. Отсюда и главный вопрос – как засунуть объект в очередь? Сейчас у меня это довольно ебануто реализовано. [code lang="cpp"] for (size_t i = 0; i < tasks.size(); ++i) { TaskMeta TaskMetaObj;
В частности я не понимаю поведение в строчке TaskMeta TaskMetaObj. Ведь таким образом менеджмент памяти будет автоматически производиться, и как только очередь вытащит этот элемент и выполнит удаление, то этот объект будет разрушен? [code lang="cpp"] T rc(std::move(this->newQueue.back())); this->newQueue.pop_back(); return rc; [/code] Или нужно создавать этот объект через new и самому вычищать его? Суть в том, что по факту надо протащить этот объект через всю программу, модифицировав его только в одном поле. Программа использует только два первых вектора и число для вычислений, а в список уже заносит полученные данные, которые печатаются. В результате программа тащит через себя вот это все говно. Я не уверен, что это эффективно.
Ещё есть задумка, чтобы писать в очередь сразу по нескольку объектов. То есть парсер вытаскивает данные из файла, считаем, например, до 10 объектов и кидаем их в очередь, а потом пробуем ещё раз. Если в момент чтения к очереди обращались, то мы опять забиваем на неё и читаем что-нибудь ещё, и пробуем обратиться ещё раз.
3. Как организовать класс с вычислениями? Сейчас у меня есть класс, который принимает ссылочку на структуру Class object(const Task& obj); В конструкторе распихивает данные по своим свойствам и производит манипуляции. Возможности сделать члены класса статическими нет, так как между собой функции обменивают большим количеством промежуточных данных. Что-то вроде [code lang="cpp"] TaksMeta task; Calc taskCalc; Loop{ task = Queue.Pop() //забираем из очереди taskCalc (task)//вычисляем Queue2.pop(taskCalc.result()); ] [/code] Как в таком случае быть с памятью? Удалять ли каждый раз объект taskCalc? Или он тут раз за разом перезаписывается? 4. Запись в файл. У меня сейчас крайне тупой алгоритм: a) Создать новый файл. b) Записать в него заголовок LaTeX файла. c) В цикле брать из очереди все обсчитанные задачи. d) Дописывать их крайне топорно в файл e) Если очередь закончилась, то завершить файл и передать файл на компиляцию. А я хочу запилить класс, который будет годной оберткой для LaTeX. file.usepackage->table //сгенерирует \usepackage{table}\n file.add(“bmatrix”)->vector(std::vector<double>); //\begin{bmatrix} 1&2&3\end{bmatirx} Это будет куда лучше? В частности документ будет на порядок чище, однако теперь про работу с этим файлом. Я пишу в него заголовок и начинаю дергать объекты из очереди на запись. Документ должен быть сформирован уже сразу “заголовок”+”тело”+”конец”, или можно просто запилить заголовок, дописывать в тело, а потом уже дописать конец файла. И ещё. Предположим, что задача у нас очень большая, обсчет занял много времени, а очередь с ответами пустует. Стоит ли закрывать в таком случае файл? 1. Открыл файл ->Дописал решение->закрыл файл-> … -> дописал конец файл 2. Открыл файл->Дописал решение->дописал решение->дописал решение->..->дописал конец файла->закрыл файл.
>>462174 Все может быть, я ж сужу на основании того, что знаю сейчас. Хотя вряд ли мне понравится работать байтоебом (не как что-то плохое, чисто субъективно).
>>462177 >Останусь ли я без работы, если буду ебаться только с плюсовыми фичами? >Останусь ли я без работы, если буду ебаться только с плюсовыми фичами? Суди сам http://hh.ru/search/vacancy?text=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+c%2B%2B >течет >сжирает Это тащем-то две большие разницы. Течет это когда у тебя память не освобождается и указатель на нее проебывается. У тебя объект создается на стеке, затем, при помещении в вектор, он копируется (там место под него выделяется динамически, то есть new/malloc, но вектор за этим сам следит). При удалении элемента из вектора/удалении самого вектора объект(ы) удаляются. То есть все ОК. >Ещё есть задумка, чтобы писать в очередь сразу по нескольку объектов. Нахуя? >Удалять ли каждый раз объект taskCalc? Или он тут раз за разом перезаписывается? Объект создается на стеке, память сама очищается при выходе из скоупа. Ничего удалять не надо (более того, если попробуешь руками удалить, будет сегфолт). >Это будет куда лучше? Без понятия. Что ты хочешь этим достичь? Вывод в файл буферизован, так что быстрее не будет. >Стоит ли закрывать в таком случае файл? Не стоит по двум причинам: 1. Нахуя? 2. Открытие файла требует времени, при закрытии файла все еще не записанные данные записываются, что тоже требует времени, даже если там всего 1 байт остался. Алсо, что касается скорости, везде, где идет большое количество добавлений элементов в вектор, замени его на лист. А лучше вообще навсегда забудь про вектор, почти всегда лист будет быстрее (вектор быстрее только когда ты заранее знаешь количество элементов и создаешь вектор нужного размера). И еще, выражай мысли лаконичнее, это пиздец все это читать.
>>462188 Нихуя. С кьютом никакого байтоебства почти, ну кроме памяти. Хотя память это скорее такой челлендж, лол, а с умными указателями даже и челленджа нет. Жабу успел поюзать, когда еще нормально начинал работать, больше не хочу. Язык хороший, но фреймворки с этой аннотационно-XMLной дрисней заставляют блевать перманентно. Шарп - нет, ибо привязка к сперме. Корявые поделки для пинуса, в которых на каждом миллиметре подводные камни нинужны, а официально еще когда портируют, когда отладят. Ну нахуй. Немало языков я попробовал, но только кресты понравились.
В QImageWriter есть метод setCompression(int compression), но я никак не могу найти где описаны комбинации format/compression type для этой функции. Там приведен всего один пример с tiff. Кто-нибудь знает где это можно найти?
>>462443 лол, странно, что они этого не описали. ну список поддерживаемых форматов можно получить через supportedImageFormats(), а вот типы компрессоров хз, попробуй посмотри в исходниках, функция write вызывает if (d->handler->supportsOption(QImageIOHandler::CompressionRatio)) d->handler->setOption(QImageIOHandler::CompressionRatio, d->compression);
>>462443 Поидее, раз ты используешь определенный формат, то должен знать, какие уровни сжатия он поддерживает. Qt тут ни при чем. Хотя, конечно, если бы они это написали, были бы еще охуеннее.
>>462471 Не, ну там же высокоуровневая обертка над ним (соответствующий плагин) и этот setCompression принимает в себя какой-то индекс. Как я, даже зная все поддерживаемые методы сжатия, могу определить какой индекс чему соответствует? В общем, хваленая документация Qt дала тут слабину.
>>462493 Ты тупой? Допустим, формат жпег поддерживает 100 разных степеней сжатия, по количеству процентов. А формат йоба поддерживает три варианта сжатия: 0, 1, 2 (без сжатия, среднее сжатие, охуенное сжатие). Это от кьюта никак не зависит, а зависит только от самого формата.
>>462526 Нет, это ты, видимо тупой. Qt реализует плагины для записи/чтения этих файлов, конвертируя степени сжатия в свои какие-то индексы. Где документация по этим стандартным плагинам? Да нету ее нихуя!
>>462526 Поясню еще: не зависит потому, что кьют, внезапно, использует 3rd party библиотеки для работы с форматами изображений. Для каждого формата имеется спецификация, в которой указано, какие могут быть варианты сжатия. Библиотеки, разумеется, следуют этим спецификациям. Кьют - всего лишь обертка в данном случае. Если сказано в спеках, что фаормат такой-то поддерживает столько-то степеней сжатия, то число в этих пределах и указывай.
>>462529 Да я тебя, блять и спрашиваю, КАК он конвертирует эти форматы сжатия в свои индексы? КАК он это обертывает? КАКОЙ мне нужно поставить индек чтобы для PNG получить RLE сжатие? В спеке PNG не написано как там какой-то Qt его использует. В 3rd party библиотеках не знают под каким номером Qt поставит то или иное сжатие.Че ты мне загоняешь прописные истины? Где мне найти таблицу соответствия (file format:encoding alg)/Qt index?
Собираюсь переписывать свою недоочередь. Какие предложения есть, чтобы было познавательно, но в тоже время не 0 уровень байтоебства и пригодилось бы на работе\собеседовании?
>>462534 >байтоебства >пригодилось бы на работе Выбери одно. А если сурьезно, то загугли очередь, только чтоб там описание алгоритма было, без кода. Почитай, вникни, реализуй.
>>462542 Ты меня спрашиваешь? Хочешь очередь - делай очередь. Хочешь производитель-потребитель - делай его. Но в последнем случае довольно сложно реализовать какой-то общий, универсальный контейнер или алгоритм, обычно такие вещи реализует каждый под свои нужды.
>>462537 Так все же, почему это нигде не отражено в документации Qt? Все-таки они основаны на этих библиотеках и было бы правильно описать на чем основывается параметр для каждого конкретного СТАНДАРТНОГО случая.
Вот как так получается? Всякие люксофты платят хотя бы 20к стажеру, а вот йоба Московский банк платить ничего не хочет. Вопрос номер два? Какого хуя такие вакансии вообще существуют? http://career.ru/vacancy/13214717?query=C%2B%2B
http://career.ru/vacancy/13097189?query=C%2B%2B >Приглашаются студенты 4-5 курсов, выпускники, начинающие специалисты ТЕХНИЧЕСКИХ ВУЗОВ для прохождения стажировки с возможностью дальнейшего трудоустройства > ТЕХНИЧЕСКИХ ВУЗОВ Пок-пок, образование не важно
>>462559 Перевожу с копроративного на человеческий > студенты / начинающие специалисты готов работать за копеечку > 4-5 курсов, выпускники но въебывать будь добр на полную катушку > ТЕХНИЧЕСКИХ ВУЗОВ О Госпади да всем насрать. Главное чтобы количество твоих знаний бесполезной поебени из IT области пересеченное со знаниями бесполезной поебени того кто будет проводить допрос превышало некий критический порог.
Мне тут скинул список того, что я должен знать, чтобы задуматься о том, чтобы пойти на собеседование. Список нормальный? Что ещё можно добавить?
это знание студии, знание стандарта 2003, знание 50% стандарта 11, знание стл, основные контейнеры, сложность операций, зачем каджый контейнер, знание исключений, знание неопределнного поведения, знание плюсового ооп, хотя бы до уровня виртуального наследования, понимать зачем нужны виртуальные деструкторы и вкак вообще работает рантаймовый даункаст (виртуальные методы)
понимание многопоточки, и основных примитивов синхронизации. атомики, мьютексы, критические секции, и их гуарды в связи с гуардом понимать что такое раии
плюс стандартные паттерны обсервер, мвц, стратегия, понимать порядок иницилиазации, понимать как работает выделение памяти, большой плюс, если знаешь что-то о шаблонах, большой плюс если знаешь примерно как это работает на уровне ассемблера всё, не плюс, а просто необходимо знать все типы кастов статик динамик реинтерпрет конст и си-стайл каст, знать когда и как их использовать, вот пожалуй и всё, что надо знать джуниору
на самом деле не очень много и быть готовым что собеседующий обязтельно спросить свою любиму задачу не потеме, типа есть кабель из москвы в австралию с таким-то каналом, за сколько пройдет пакет в мегабайт, и там не проебаться со скоростью света, или быть готовым ответить на то, сколько комбинаций выпадает на шестигранных кубиках с повторениями и без
вот в таком духе а по техническим соотв быть готовым к виртуальным деструкторам, почему нельзя использовать ауто_птр, и сотни других
>>462587 ну да, дохуя, но на самом деле 90% этого есть в любой хорошей книге по с++. а так, если будешь все это понимать уверенней же в себе сам будешь. и еще я бы к списку добавил Qt, boost, Win Api хотя бы на уровне "подключал, запускал пару функций". Это из требований к чистым плюсовикам.
>>462625 Проверь как работает operator< с твоими строками, вообще он должен лексографически сравнивать и все должно быть ок, но больше что-то нихуя не приходит в голову. Попробуй версию sort с тремя параметрами.
>>462636 На стаковерфлов разжевали, оказывается при создании вектора через stream-ы всё распидорашивало. http://pastebin.com/MPMRk4vV заменил на это. В C++ всё через жопу, блядь.
>>456723 Есть у меня например N векторов, и N пар (Ai, Bi). Есть еще функция, принимающая X, и вычисляющая некоторое значение используя оператор[] на этом X. Вопрос: Как получить какой то обьект, который бы связал все значения N векторов в один X, так чтобы он "состоял из" V1[A1], V1[A1+1],...,V1[V1], V2[A2], V2[A2+1], ..., V2[B2], ... Vn[An], Vn[An+1],...,Vn[Bn] Без копирования, естественно.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Предыдущий: