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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
189 Кб, 411x801
C++ тред sage #456723 В конец треда | Веб
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.

Предыдущий: >>448310
244 Кб, 1411x928
sage #2 #456726
Пользуясь случаем, вбрасываю нормальную доску с тегом [code] и кодерской капчей.

https://ololoepepe.me/board/pr
https://github.com/ololoepepe/ololord

Чейнджлог с прошлого раза (оптимизация):

+ Информация о файлах (картинках) теперь хранится в базе (да, раньше в файле хранилась, потому что изначально не предусмотрел и было лень переносить посты из старой базы в новую).
+ Ссылки на посты теперь хранятся в отдельной таблице, что существенно увеличивает скорость их добавления и особенно удаления (раньше при удалении приходилось читать и записывать каждый пост).
+ Добавил поле "userData" в таблицу "posts" - дополнительные данные для нестандартных досок. Раньше приходилось извращаться с запихиванием, например, в поле "subject", то есть жутчайший говнокод.
+ Проверка капчи и все операции с файлами (сохранение и создание превью) теперь происходят до начала транзакции БД, чтобы не вызывать длительной блокировки.
+ Удаление файлов происходит после завершения транзакции, что, как и в предыдущем пункте, снижает длительность блокировки, а также не приводит к преждевременному удалению файлов, если вдруг транзакция откатится.
+ Файлы превью при откате транзакции теперь также удаляются (раньше не удалялись).

Прочие мелочи:

+ Для файлов без расширения оно автоматически выбирается на основе MIME-типа и добавляется к имени.
+ Теперь отображается дата и время последнего редактирования поста. К черновикам не относится (пока пост в статусе черновика, его можно сколько угодно редактировать, эта шняга не появится). Сделано, по сути, для того, чтобы показывать, когда мочератор/админ злоупотребляет полномочиями, чтобы без повода все подряд не редактировал.
+ Забаненные IP, а также IP, запросы с которых не логгируются, теперь задаются в виде диапазона (192.168.0.1-192.168.0.255), а не wildcard'ом, как раньше.
+ Исправлено отображение трипкода (а то он даже при включенной галочке не отображался, может это и к лучшему было, лол).

И еще (хоть к движку это и не относится): отключил форму поиска, а то, говорят, у некоторых страница не отображалась, пока эта сраная форма не прогрузится (что странно, ведь у меня то отображалась).
244 Кб, 1411x928
sage #2 #456726
Пользуясь случаем, вбрасываю нормальную доску с тегом [code] и кодерской капчей.

https://ololoepepe.me/board/pr
https://github.com/ololoepepe/ololord

Чейнджлог с прошлого раза (оптимизация):

+ Информация о файлах (картинках) теперь хранится в базе (да, раньше в файле хранилась, потому что изначально не предусмотрел и было лень переносить посты из старой базы в новую).
+ Ссылки на посты теперь хранятся в отдельной таблице, что существенно увеличивает скорость их добавления и особенно удаления (раньше при удалении приходилось читать и записывать каждый пост).
+ Добавил поле "userData" в таблицу "posts" - дополнительные данные для нестандартных досок. Раньше приходилось извращаться с запихиванием, например, в поле "subject", то есть жутчайший говнокод.
+ Проверка капчи и все операции с файлами (сохранение и создание превью) теперь происходят до начала транзакции БД, чтобы не вызывать длительной блокировки.
+ Удаление файлов происходит после завершения транзакции, что, как и в предыдущем пункте, снижает длительность блокировки, а также не приводит к преждевременному удалению файлов, если вдруг транзакция откатится.
+ Файлы превью при откате транзакции теперь также удаляются (раньше не удалялись).

Прочие мелочи:

+ Для файлов без расширения оно автоматически выбирается на основе MIME-типа и добавляется к имени.
+ Теперь отображается дата и время последнего редактирования поста. К черновикам не относится (пока пост в статусе черновика, его можно сколько угодно редактировать, эта шняга не появится). Сделано, по сути, для того, чтобы показывать, когда мочератор/админ злоупотребляет полномочиями, чтобы без повода все подряд не редактировал.
+ Забаненные IP, а также IP, запросы с которых не логгируются, теперь задаются в виде диапазона (192.168.0.1-192.168.0.255), а не wildcard'ом, как раньше.
+ Исправлено отображение трипкода (а то он даже при включенной галочке не отображался, может это и к лучшему было, лол).

И еще (хоть к движку это и не относится): отключил форму поиска, а то, говорят, у некоторых страница не отображалась, пока эта сраная форма не прогрузится (что странно, ведь у меня то отображалась).
243 Кб, 750x1080
#3 #456736
>>456723
Что нужно изучить, чтобы начать работать программистом на плюсах?

Я так понимаю, изучить книжку "Лекции и упражнения", автор Прата, потом изучить STL, потом изучить фреймворк Qt. Правильный алгоритм действий?
sage #4 #456739
>>456736
В целом да, еще неплохо бы изучить предметную область. Ну и как правило Qt и STL вместе не используются. Еще boost посмотри. Все зависит от конкретной конторы и конкрртной задачи.
#5 #456759
>>456726
Пиздос там капча.

Определить високосный год или нет. Я хз, как это будет на с/с++. Погуглил стандартные функции работты со временем и вляпался в какие-то указатели из буста и прочих извращей.
Крч, идите нахуй, русафобы.
sage #6 #456761
>>456759
god % 400 == 0 || god % 4 == 0 && god % 100 != 0
няша
#7 #456768
>>456761
Я что такое подозревал, но хотел прост в одну строчку узнать кол-во дней в году, если 366, то високосный.
Спасибо.
#8 #456782
>>456768

bool leapyear(const int y)
{
if (y % 4 != 0) return false;
if (y % 100 != 0 || y % 400 == 0) return true;
return false;
}

Может, быдлокод, зато более читаемо однострочник.
#9 #456787
>>456782
или так (что одно и то же):

bool leapyear(const int y)
{
if (y % 4 != 0) return false;
return y % 100 != 0 || y % 400 == 0;
}

Хотя уже менее читаемо.
#10 #456790
>>456723
Охуительный тред.
#11 #456809
Господа, объясните мне:

http://ideone.com/lfA317

Почему 9, а не -7? Да, я специально спрашиваю именно про int % unsigned int.
#12 #456821
>>456809
И эти вот люди потом рассказывают, что Javascript ебанутый язык. Ну-ну…
#14 #456828
>>456821
Где там эта картинка с розовым фоном с подписями в духе "потому что мы любим обратную совместимость"?
#15 #456829
>>456826
Почему к ансигнеду приводит, когда первый операнд -- как-раз-таки инт?
#16 #456830
>>456829
v dushe niibu
#17 #456833
>>456830
Ну просто если рассуждать по аналогии:

int a, b;
double ddd;
//double d = a/b ddd; //a/b information loss
double d = ddd
a/b; //OK

Всё приводится к даблу. Почему a % b не приводит к типу a?
#18 #456834
>>456833
Вместо @ умножение.

int a, b;
double ddd;
//double d = a/b @ ddd; //a/b information loss
double d = ddd @ a/b; //OK
#19 #456837
>>456833
http://www.learncpp.com/cpp-tutorial/44-type-conversion-and-casting/
короче ансигнед имеет более высокий приоритет
#20 #456870
Быдлокодер под МК, учился на электронщика поэтому особо в программировании то и не шарю. Все учил сам методом проб и ошибок. Вообщем то проекты пишу, вроде бы даже придрочился и все хорошо работает. Так вот что почитать по С++ эмбедеру, что бы вырасти в профессиональном плане?
#21 #456884
Почему mktime может крашить программу? Такого поведения у него ведь не должно быть вообще?
Структуру пробовал мемсетом инициировать в 0, выносил из локального скоупа, не помогает.
#23 #456889
>>456887
И что? Я референс читал, не вижу ошибок.
Вот кусок кода с мэйктаймом, всё до него выполняется нормально
https://ideone.com/AW67CO
#24 #456916
>>456884
>>456887
>>456889
перепроверил, mktime выполняется нормально, а вот stime почему-то не работает
#25 #456923
>>456916
stime работает, но что-то тут нечисто
sage #26 #456937

>работает


>не работает


>работает


>не работает


Так работает или нет? Ты уж определись.
#27 #456939
>>456937
теперь всё работает, оказывается мне виртуалбокс своё время пихал насильно, пришлось придушить
#28 #457060
>>456736

>Лекции и упражнения", автор Прата


В этой книги есть какие-нибудь интересные примеры? У меня просто дико жопу рвет сейчас. Я, вроде бы, знаю основы языка, но сука, не могу их нормально использовать в проектах.

Пилю проект. Взял boost. Просто охуеваю от непонятности некоторых частей. Половина кода копипастой, ибо поставил себе определенный дедлайн.

Дико печет, что, вроде бы, знаю, но на деле нихуя не знаю. Хули делать, я уже волосы их жопы выдергивать начинаю.
#29 #457061
>>456870
Я читаю методички, которые отжал у знакомых, например. Тоже электронщик.
#30 #457073
>>457060

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


Потому что надо начинать с джавы. Там целый день сидишь, капчу двачуешь, а у тебя пяток классов написано на пустом месте.
#31 #457078
>>457073
Но я хочу быть охуенным. Java не так охуенно, как кресты.
#32 #457145
Считается ли зашкваром писать на java, активно используя C++ через JNI?
долбоёб
sage #33 #457146
Псссс. Перед сном окропляю долбоебов уриной.
#34 #457152

> 2015


> лайки в /b


> до сих пор не починили [code]

#35 #457153
>>457145
Если ты под андроид пишешь что-то графически тяжелое.
#36 #457164
>>457061
а че за методички?
#37 #457171
Ананас, есть ли возможность после инициализации увеличивать размер зарезервированной памяти поинтеру на тип данных?
Например, чтоб дописывать чары в строку, заданную поинтером на чар.
#38 #457173
>>457171
realloc, но он ничего не гарантирует. Чем тебя вектор не устраивает?
#39 #457175
>>457173
Мало анальных извращений. Хочу самописный класс-контейнер "текст", который работает по принципу адресной арифметики и может дополняться на ходу, поэтому, естественно, просто адресная арифметика мне не подходит.
#41 #457241
>>457175
Тогда только прямая работа с виртуальной памятью, только это троллейбус из буханки. Проще сделать что-то вроде deque - выделять память крупными кусками, хранить их список в векторе, и поверх этого приделать индексацию.
#42 #457285
Анон, у меня есть метод print(const std::string&) для вывода инфы в консоль. Как можно понять, работает он только со строками. Как мне сделать так, чтобы он принимал еще и разные числа и bool? Перегружать для каждого типа отдельно? Но это будет проблематично, потому что у меня довольно много таких функций типа messageBox, fatal, assert(bool, const std::string&) и я заебусь каждую перегружать.
#43 #457292
>>457285
to_string
#44 #457294
>>457292
Ну я бы хотел, чтобы использовать их было как можно проще, т.е. без всяких конверсий в вызове. Может там синтаксис какой есть. Но, так понимаю, без перегрузки такого сделать не получится, поэтому перегрузить каждую функцию и вызвать из нее оригинальную с to_string кажется уже не такой плохой идеей.
sage #45 #457312
>>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);
Но это, повторюсь, тупо и костыльно.
#46 #457335
Товарищ капитан, разрешите [strike]войти[/strike] вопрос по std::basic_ostream::write

#include <cstdint>
#include <cstdlib>
std::basic_ofstream<uint8_t> ost(filename, std::ios::binary);

Хочу записать в filename файл n штук байтов, состоящих из нулей. unsigned int n на этапе компиляции неизвестно. Как это сделать без создания массива

uint8_t@ n_zeros = (uint8_t@)std::calloc(n);
ost.write(n_zeros, n);

А сразу через ost.write() напрямую нули в файл писать? Или через какой-то другой метод?
#47 #457357
>>457335
Ну блядь, либо обоссыте, либо скажите, что многого хочу.
#48 #457363
>>457294
Напиши темплейтную функцию:

template<class T>
void log( const T& item ) {
print( to_string( item ) );
}

template<>
void log<std::string>( const std::string& item ) {
print( item );
}
#49 #457364
>>457335
operator<<, ты знаешь о нем? Откуда вы лезете, блджад?
#50 #457369
>>457364

>binary


сам куда лезешь, быдло

>>457363
Ничё не понял. Стринг ещё какой-то, он-то тут при чём?
#51 #457388
>>457369

>binary


Ты тупой совсем? of << 'a' это тоже самое, что char a='a'; of.write( &a, 1 );

>Стринг ещё какой-то, он-то тут при чём?


При том, что to_string<string> не определен

>Ничё не понял


Ты ведь в ПТУ учишься, я угадал?
#52 #457389
>>457388
Какой нахер оператор << для бинарной записи? Очнись, ты на лекции.
#53 #457392
>>457389
Ебать, и правда ПТУ.
#54 #457395
>>457392
Use google.

>When we move from character-oriented I/O to binary I/O, we give up our usual >> and << operators.

#55 #457408
>>457395
Стандарт лучше читай, а не Страуса
http://stackoverflow.com/questions/1278259/c-fstream-and-operators-with-binary-data
#56 #457417
>>457408
Сука, чтоб он в аду горел. Зачем он так написал тогда?
#57 #457422
>>457417
Скопипастил со старого издания, и не посмотрел, что стандарт поменялся. Был пару месяцев назад тред, где анон бугуртил с ошибок в его книгах.
#58 #457457
http://pastebin.com/vVQEGzFG
как сделать выборочное закрытие процессов
при нажатии на 4 закрывается calc.exe, 5 - mspaint.exe и тд
#59 #457473
>>457457
Какил, зачем тебе закрывать процессы? Иди бомбас освобождай.
#60 #457474
>>457457
Кэйс для 4 и 5 добавить что ли?
#61 #457475
>>457474
Слишком сложно жы.
Кстати, там не плюсы, а кондовый си с винапи.
#62 #457476
>>457473
в /po/ или /nvr/ pls
#63 #457479
>>457474
http://pastebin.com/wA2XJjW9'
я то сделал так но это явно не решение проблемы.
#64 #457483
>>457476
С демонстративными каментами на русско-польском диалекте - туда же.
#65 #457484
>>457483
ну извини, препод требует комменты на хохольском
#66 #457485
>>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.


И что происходит?
#67 #457507
>>457484
Русских людей обижают! Ну ничего, братушки, скоро мы вас ОСВОБОДИМ.

>>457422
Вот же ж ленивый ублюдок. Бабла, наверно, гребёт немеренно со своих фанбоев, а стандарт собственного языка не читал.
#68 #457523
>>457507
>>457483
москаляку на гiляку
#69 #457528
>>457507

>Русских людей обижают! Ну ничего, братушки, скоро мы вас ОСВОБОДИМ.


никто меня не обижает, скажу больше я свободно говорю на русском в Харькове и Мариуполе
просто документация должна быть на государственном языке
#70 #457530
>>457528
лекции тоже на русском
sage #71 #457536
В каждом треде найдется даун, начинающий остоебенившую политику.
#72 #457544
>>457536
Да всё, закрыли тему. Пошутили и хватит. Должен же кто-то бампать, а то опять уплывёт к хуям на третью страницу.

Лучше расскажите про 15 Студию, например, в контексте поддержки стандарта. Постоянные выражения будут НАКАНЕЦТА. А что ещё?
#73 #457589
Need help.

Погуглил, но так ничего и не понял.
error LNK2019: unresolved external symbol...

Ругается только на winapi-шные функции. Проблема появилась после того как запихнул куски говна кода на нормальном С++ в проект CLR.
sage #74 #457648
>>457589
Спермоклоунам не помогаю.
22 Кб, 749x521
24 Кб, 749x521
#76 #457822
>>457589
Подключи библиотеки необходимые. В справке каждой функции указана либа. В свойствах проекта линкера есть поле, куда заносишь имена этих .lib файлов. Если они валяются по нестандартным путям, прописываешь пути в соответствующем поле.
#77 #457862
>>457806
Почти что нихуя. Говно.
#78 #457946
Как мне сделать вектор, который может хранить любые экземпляры template-класса? Пишу std::vector<MyTemplateClass> - не хочет компилировать.
#79 #457948
>>457589
user32.lib подключи в linker->input->additional deps
#80 #457950
>>457946
что?
Ты хочешь std::vector<A> точбы можно было A<B> и A<C> туда пихать?
По-моему никак
#81 #457953
>>457950
Но почему? И как в таком случае быть?
sage #82 #457958
>>457953
По кочану. Шаблоны в крестах - не дженерики, как в жабе. Это нечто уровня макросов, если не вдаваться в подробности.
Используй QVariant или аналоги, ну или union, но с этим осторожнее.
#83 #457960
>>457958
Я не на qt. У меня студия.
#84 #457961
>>457953

>Но почему?


Потому что для компилятора это абсолютно разные классы.

>И как в таком случае быть?


Например, хранить в векторе указатели на экземпляры классов. Или использовать что-то вроде Boost.Variant.
#85 #457962
>>457958
union работает только с POD
#86 #457963
Если я пишу myVector->clear(), то у объектов в этом массиве вызывается деструктор?
#87 #457964
#88 #457966
>>457964
А если в векторе лежат указатели?
#89 #457970
>>457648

>> 2015



>>Всё ещё не прошла боль от семёрки, хотя уже 10-я вышла.

#90 #457977
>>457966
Нет
#91 #457986
>>457946
Можешь использовать Type Erasure, хотя костыль получится. А что за задача?
http://habrahabr.ru/post/207294/
#92 #457999
>>457966
Только если умные
#93 #458002
Сделайте лабу.
#94 #458033
>>457962
>>457962
В новом стандарте с любыми типами.

>>457958
в пизду кьюти. boost::variant тебе подойдет, или если пишешь на новом стандарте, то union.
sage #95 #458064
>>458033
>>457960
Вы в глаза долбитесь там, дауны?

>или аналоги


>или аналоги


>или аналоги


>или аналоги

#96 #458125
Мудак на связи.
Решил обмазаться этим вашим QT, в котором есть все, даже небо, даже аллах. Подскажите годной литературы, а то я открыл qt'шные примеры и заблудился.
#97 #458127
>>458125
Двощу. Мой воображаемый дедлайн к 9 числу должен заделать Gui приложения. Пока не знаю с чего даже начать.
#98 #458130
>>458127
С доки по QObject
#99 #458197
>>458125
открой кутешные туториалы
31 Кб, 317x372
#100 #458210
>>456726
чего ты там нахуярил то столько, блядь?
нужно ж два раута: создать пост и получить новые посты аяксом
html с тредом в большинстве вакаб сохраняется в файл и дальше уже статически раздается

итого:
- fastcgi либа (или можно охуеть и сделать просто cgi борду повесить демоном и общаться с ней как-нибудь). если кровь из носу хочется хостить самому (но зачем) - mongoose
- база из одной таблицы (пикчи хранить в файловой системе). даже если руками делать нуждно то btree и файлмаппинг в память (у нас же не банк, упадет и хуй с ним). ну или взять какой-нибудь leveldb, а лучше вообще sqlite
- 2 простых как палка раута + сколько влезет раутов для админки с какой угодно логикой
- (опционально) SSI или ручной сервинг для собственной капчи или csrf токена
- шаблоны, что одинакого рендерятся и на клиенте и на сервере (mustache подойдет, логики в бордовском шаблоне ноль). для подсветки синтаксиса проще на клиенте highlightjs или prism взять.
- 2 кило жс кода для подгрузки и расставления новых ссылок

короче, мне кажется, ты, браток, перемудрил
и я бы не назвал борду lightweight:
- судя по тому, что нулевая приходит 450мс ты рендеришь все заново каждый раз
- иконки приходят по одной, 60-70мс на каждую
sage #101 #458250
>>458210

>fastcgi либа


Нахуя? Чем тебе отдельное приложение не угодило? VPS и вперед, если охота платить бабки за сайт, которым никто не пользуется. Мне вот не охота, поэтому у меня и хостится.

>база из одной таблицы


Я посмотрю, как ты будешь заново отрендеривать ссылки на посты при их удалении с такой архитектурой. Фичу с хешами файлов и подавно так не реализовать.

>sqlite


И так. Нахуй тут что-то другое?

>2 простых как палка раута


Редактирование поста, удаление поста, получение новых постов, проверка хеша файла и так далее.

>SSI


Чет нихуя не понял, зачем мне это.

>mustache


Лишний скрипт - лишний вес. Увы. А так мне идея очень понравилась.

>проще на клиенте highlightjs или prism взять


Это сразу на хуй. Во-первых, см. предыдущий пункт, во-вторых это не задача клиента. Ты еще бы предложил вакабамарк на клиенте рендерить.

>2 кило жс кода для подгрузки и расставления новых ссылок


Присутствует. В два кило, правда, без дополнительных зависимостей и без минификации не сделать.

>приходит 450мс


Проблемы клаудфлары, я полагаю.

>рендеришь все заново каждый раз


Сама страница да, рендерится. Но каждый отдельный пост по большей части кеширован (не кешируется только то, что надо локализовать, дата/время, например, или названия кнопок).

>иконки приходят по одной, 60-70мс на каждую


Опять же, проблемы клаудфлары, скорее всего. Оно там у них в кеше, что якобы должно прибавлять скорости. Наверное отключу на хуй это говно. Так то статика у меня в памяти кешируется, не должно так долго отдаваться.
527 Кб, 1173x522
sage #102 #458253
>>458250
Как я и говорил, проблемы флары, чтоб у них понос случился. И отчасти твои проблемы тоже, судя по всему.
548 Кб, 1173x522
sage #103 #458254
>>458253
И картинки, фор тех джастис. Так что дело во фларе и в твоем р(о)утинге до него.
71 Кб, 1453x690
sage #104 #458358
>>456726
А тем временем:
+ Исправлено сообщение "Вам не надо вводить капчу...". Теперь после очередного поста обновляется.
+ Добавлена поддержка видео форматов .mp4 и .ogg (.ogv).
+ Реализована поддержка аудио (.mp3, .ogg, .wav).
+ Для всех поддерживаемых типов файлов добавлены иконки в поле выбора файла.
+ Загрузку файлов из треда теперь можно прерывать.
+ Количество постов без ввода капчи теперь сохраняется после перезапуска сервера.
+ Добавлена новая разметка (для тех кому не нравятся bbCode'ы). https://ololoepepe.me/board/pr/thread/15.html#165
+ Реализован свой поиск, без использования гугло-апи. Пикрелейтед.
sage #105 #458445
>>458358
отличная доска
только вот URL сосёт
sage #106 #458461
>>458445
Щито поделать, название нормальное придумать не могу, а говняное не хочу. Ну а без названия и домен не подобрать.
#107 #458463
>>456723

>Лабы идут на хуй


на этой параше пишут что-то помимо lab2?шутка
sage #108 #458464
>>458461
ну а потом придумаеш?
sage #109 #458465
119 Кб, 913x479
sage #110 #458466
>>458464
Конечно. Я вообще думал прикупить пикрелейтед, но чет в сомнениях, не наебалово ли, они ж недоступны для продажи были. Надо у других провайдеров еще посмотреть. Да и вообще, из доброй памяти не хочу трогать. Но все равно очень заманчиво.
#111 #458492
Плюсач, вобщем у меня есть одна программа, она расчитана на многочасовое выполнение, вобщем, как реализовать многозадачность\\хз как назвать. Допустим есть алгоритм:
cout<<12;
sleep(1000);
и
cout << 13'
sleep(1213);
как сделать возможным одновременное выполнение сего?
#112 #458493
>>458492
Мультитрединг гугли.
#113 #458495
>>458492
std::thread
sage #114 #458498
>>458492
void task1() {std::cout << "ya ebal"; sleep(9000);}
void task2() {std::cout << "tvoyu mamku"; sleep(100500);}
QtConcurrent::run(&task1);
QtConcurrent::run(&task2);
#115 #458499
>>458498
У этого сажепетуха на все один ответ - Qt.
#116 #458501
>>458499
а я и не против :3
#118 #458510
>>458503
Ехал thread через thread,
Видит thread в thread thread.
Сунул thread thread в thread,
Thread за thread thread thread.
#119 #458511
>>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

> Как я и говорил, проблемы флары, чтоб у них понос случился. И отчасти твои проблемы тоже, судя по всему.


ну хуй знает
#119 #458511
>>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

> Как я и говорил, проблемы флары, чтоб у них понос случился. И отчасти твои проблемы тоже, судя по всему.


ну хуй знает
#120 #458512
>>458511

> захотел прямо в процессе сокет держать, ну так возьми mongoose, он из двух файлов состоит и простой как пробка


ты примерно так и сделал, тащемта, тут я не прав
sage #121 #458527
>>458511

>нахуя смешивать две ортогональные вещи?


Какие две вещи? Приложение получает запрос, обрабатывает его, отдает ответ. Что с чем смешано?

>не осилил


Осилил, но нахуя? Что мне это дает? Скорость? Упрощение логики? Какой именно?

>нинужно


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

>был бы один файлик


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

>лол


>охлол


Теперь я знаю, из-за кого веб стал таким говном.

>лол, то есть это не ты контент медленно отдаешь, а специализированная система доставки контента, которая на этом к тому же деньги делает, виновата?


Лол, то есть это не ты в глаза долбишься и отрицаешь очевидные результаты со скринов, а я медленно что-то там отдаю?

>тот же nginx сделал бы это куда лучше


Как nginx относится к моему приложению вообще? Правильно, никак. Не надо смешивать ортогональные вещи (с).

>ты, короче, придумал себе проблем, а теперь героически их решаешь


Никаких проблем нет, все прекрасно работает.

>ну хуй знает


Придумай более другое объяснение скриншотам. Время чистого рендеринга/отдачи статики сам видишь. Никаких 400мс там и близко нет.

Я вот что скажу, у нас с тобой разные взгляды на то, как все должно быть устроено. Разная философия, что ли. Может, я в чем-то и не прав, а может и ты.
sage #122 #458530
>>458527
Пожалуй, поясню еще по поводу nginx. Не хочу раздристывать логику по всем уровням, потому как это каждый раз боль при переносе на новый хостинг. Надо все заново настраивать и т.д. Не думаю, что nginx умеет каким-то чудом быстрее обращаться к памяти. Так что пусть оно все будет в одном флаконе, так сказать, работоспособное как с nginx-ом, так и с другими приблудами, или вовсе без них.
#123 #458558
Вечер добрый, программач.
Есть набор .obj файлов. Как сделать превью в виде картинки?

Парсинг, отображение в огл контексте уже реализован. Но нужна именно какой-то модуль, к-й позволит сделать пикчу, ничего не рисуя на экране.

Был ли у кого-то подобный опыт?
sage #124 #458564
>>458558

>опыт решения реальных задач


>на сосаче


Ты серьезно?
А вообще, только ручками, похоже. Гугл говорит, что готовых решений нет. Так что перегоняй байтики в нужный формат (что у тебя там, png, jpeg?) и, если надо, уменьшай размер.
#125 #458593
>>458558
Не понял твоей проблемы. Рисуй в текстуру, потом сохраняй ее как картинку.
#126 #458754
>>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 ;
}
#127 #458760
>>458754
f2 должна быть static.
#128 #458763
>>458760
а без этого никак ?
#129 #458790
>>458763
В другом случае считается что в качестве первого аргумента она принимает указатель на объект класса.
30 Кб, 700x267
sage #130 #458798
>>458763
Очень даже "как".
#131 #458861
>>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й функции, но после нажатия следующей новый поток не работает
#131 #458861
>>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й функции, но после нажатия следующей новый поток не работает
#132 #458863
>>458798
Че за гуи?
sage #133 #458864
>>458863
Qt ?
#134 #458865
>>458864
Нет, терминальчик няшный.
#136 #458868
>>458867
Прикольненько. В кодеблох пидоришься? Сильно сосет относительно VS?
sage #137 #458869
>>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);
sage #138 #458872
>>458868
QtCreator. Нахуй ваши вс и кодоблохи, студия тяжелая и неповоротливая, блохи слишком куцые и ничего не могут.
#139 #458874
>>458872
А ты где-нибудь работаешь?
#140 #458876
>>458869
cпасибо, все работает, ты ахуенен
sage #141 #458877
>>458874
В говновузе по удаленке пилю редактор TeX на крестах. Можно считать что не работаю, уже полгода как не притрагивался к коду. Платят соответственно.
#142 #458880
Кстати, поясните мне за потоки обычные, которые из 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
Ну и то хорошо. Главное, чтобы на хлеб было чего намазать.
37 Кб, 449x425
#143 #458898
>>458880
Лол. Надо было просто погуглить. Олсо, второй вопрос все-таки ещё остался.
#144 #458919
анон, задай, пожалуйста в ответ 2-3 вопроса, чтобы убедить меня, что я говно в плюсах
#145 #458920
>>458919
зачем нужен виртуальный деструктор?
#146 #458921
Если А абстрактный класс, а В унаследовный от него конкретный, можно ли так написать?
A a = new A();
A
a = new B();
#147 #458922
>>458921
Ебал я писать на этой борде код.
#148 #458926
>>458921
там тред ниже со скриптом
#149 #458927
>>458920
чтоб объекты наследники норм удалялись (динамический полиморфизм бла-бла-бла)
>>458921
1 строка нет, 2ая да

го посложнее че-нить епта
sage #150 #458930
>>458880

>Главное, чтобы на хлеб было чего намазать.


Для этого мамка есть. Ебал я свои деньги на еду тратить.
#151 #458945
>>458927
1) Зачем нужны weak_ptr.
2) Что такое mutex
3) Что такое deadlock
4) Что такое race condition
5) Что такое слот-сигнальная архитектура
6) Знаете ли вы Boost
#152 #458946
Ну и
7) Чем различаются разные cast'ы в C++
dynamic_cast, static, обычный.
8) что такое vtbl, когда она создаётся.
#153 #458949
>>458945
годно, спасибо.
1. как шаред птр только при захвате объекта не искрементирует рефкаунтер
2. одно из средств организации доступа к объекту в условиях N потоков
3. состояние взаимной блокировки
4. хз че-то с потоками вроде тоже?
5. когда на определенное действие генерируется сигнал и ему сопоставляются слоты (типа как в Qt)?
6. нет конкретики. filesystem, regex, matrix часто. ну и по мелочам (intrusive_ptr, noncopyable и тд)
sage #154 #458952
>>458945
Я не он, но:
1) Костыль.
2) Хуйня для совместной работы нескольких потоков с одним набором данных (переменной).
3) Лок нерекурсивного мьютекса из одного и того же потока, например.
4) Когда потоки одновременно пытаются работать с одним куском данных, и в каком порядке произойдет взаимодействие неизвестно (а может один поток начнет работать, когда второй еще не закончил и кровькишкираспидорасило).
5) Костыль для замены рефлексии, но довольно удобный.
6) Говно ебаное. Нахуй не нужен. Шутка.
7) Лень описывать, но короче статик самый строгий, динамик так и сяк, а ренинтерпрет - можно в ногу выстрелить.
8) Таблица виртуальных методов. Чтоб короче из приведенного к базовому классу объекта наследованного класса можно было вызывать виртуальный метод, а вызывался метод, определенный в наследованном классе. Создается если есть хоть одни виртуальный метод (вроде).
Нахуй я это пишу.
#155 #458953
>>458946
8. таблица вртутальных функций для класса, нужно наличие как минимум 1 виртуальной функции
7. вот в этот говне я плаваю сильно, с кастами слабо всегда было.
динамик каст ну для иерархий вируальных классов.
static cast и обычный - хз не знаю разницы, по-моему оба каста времени компиляции обычные, с проверками типов
const cast снимает волатайл и конст, хз не юзал ни разу в жизни
reinterpret cast типа без проверки типов каст, хз тоже не юзал ни разу

про касты если простым языком напишешь и конкретно где применяется конст и reinterpret было бы круто
#156 #458960
>>458952

> signal/slot


> Костыль для замены рефлексии


Wat?

>>458919
Что такое SFINAE? И нах он нужен?
Что такое идеальная передача?
Какие условия должны соблюдаться, чтобы тип был POD?
#157 #458961
>>458949
Так-то верно, но от 1,4 МЫ ВАМ ПЕРЕЗВОНИМ
1) Не как устроен а зачем нужен, юзкейсы. На собеседованиях кстати почти всегда спрашивают о юзкейсах в каком-то понятии а не об абстрактном определении. Было ли у тебя такое на практике. Что именно приводило к ситуации.

Ответы сам нагуглишь, они легко гуглятся.

>>458952

>1) Костыль.


Вот такое на собеседовании тоже нельзя говорить, на крестах пишут старпёры по 40 лет, и тут какой-то сопляк в скайпе им будет пояснять что костыль а что нет. У них от этого сразу НЕПРИЯТНО становится.

>5) Костыль для замены рефлексии, но довольно удобный.


ШТО?

>6) Boost не нужен


Лол, boost это как всякие Spring и Hibernate для жабы, без него никуда.
>>458953
Если честно то там где я работал никто не юзал ничего кроме static_cast и били по голове если кто-то вообще пытался использовать RTTI. Вся работа по определению типа была сделана сквозь Visitor'ы (Паттерн такой, самый наркоманский на первый взгляд). Хотя по идее ведь даже сквозь Visitor мы используем RTTI неявно, когда вызываем внутри виртуальный метод обьекта. Так-что я кроме static_cast и dynamic_cast ничего и не помню.
sage #158 #458964
>>458960
А что не так? Хз как в ваших бустах это реализвано (и знать не хочу), а в Qt сигналы и слоты позволяют вызывать методы по имени, то есть ты можешь хоть в рантайме у юзера запросить строку с названием метода и вызвать его.
Не только это, конечно, но в основе именно оно лежит. Метакомпилятор добавляет в отдельный файл таблицу соответствия названий методов и самих методов (ну и сигнатур, само собой). В жабе все это при помощи рефлексии делается, ну, там, [code lang=cpp]object.call("methodName");[/code] или типа того, точно не помню, а в Qt [code lang=cpp]QMetaObject::invokeMethod(object, "methodName");[/code]
#159 #458966
>>458961
ладно спасибо, про weak ptr я только в теории тоже знаю, тк не использовал тоже ни разу, я ж вообще не с++ программист, а потоки и паттерны да, надо подтягивать обязательно, спасибо
#160 #458967
>>458960

>Что такое SFINAE? И нах он нужен?


лил, хз

>Что такое идеальная передача?


шта?

>Какие условия должны соблюдаться, чтобы тип был POD?


для меня это любой тип в с++ пришедший из С (не ООПшный карочи)

[spioler]унизил кароч)))[/spoiler]
47 Кб, 543x422
sage #161 #458968
>>458961

>нельзя говорить


Мне поебать. Пусть берут мудака, не умеющего думать, зато умеющего лизать, их дело. Костыль есть костыль.

>ШТО?


См. >>458964

>без него никуда


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

>Паттерны


Прости, слово-триггер, не удержался. Пикрелейтед.
#162 #458970
>>458964
Тёплое с мягким перепутал. Мок в кутах, конечно, позволяет получать метаинформацию об объектах, но вопрос был про архитектуру сигнал/слот. Вещи связанные, но ответ должен был быть в духе:
Мамка посылает сигнал, что приезжает тётя Люда, после чего у Бати срабатывает подключённый слот – одеть праздничные штопанные труханы.
sage #163 #458971
>>458960
Алсо,

>SFINAE


Костыль, опять же, но точнее плохой дизайн, но полезно.

>идеальная передача


Это не && ли в конструкторе случаем? Очередное байтоебство, может где-то и пригодится.

>POD


Ну вот нахуя это знать на память? Заняться что ли больше нечем? Тип без конструкторов, деструкторов и виртуальных методов. Не представляю, где это необходимо знать заранее.
sage #164 #458973
>>458970
Я описал как оно внутри работает. То что ты говоришь и так очевидно: кто бы мог подумать, что испускание сигнала вызывает слот! Вот это нежданчик.
#165 #458974
>>458919
1. Несколько переменных одинакового типа объявляются так: int a, b, @c (@ вместо звездочки). Вопрос: как это все взаимодействует с const? Можно ли делать int a, const b, @const c?
2. В чем разница между const char @c = "..." и const char c[] = "...".
3. Для чего нужно ключевое слово mutable.
#166 #458975
>>458952

>короче статик самый строгий, динамик так и сяк


Мы свяжемся с вами позже
#167 #458979
>>458974

> 2.


Разве есть разница?
sage #168 #458980
>>458973
Ну то есть я хочу сказать, вызывающий передает системе строку с именем сигнала, система смотрит, какие слоты (опять же, по именам) прикручены, находит их, вызывает. Если тип соединения соответствующий и/или получатель живет в другом потоке, то ставит в очередь этого потока, там свой цикл уже разбирается при очередном проходе. Но суть все равно в том, что оно основано на рефлексии, иначе получается как в бусте коряво и нинужно.
#169 #458981
>>458974
1.

>Можно ли делать int a, const b, @const c?


const b нельзя @const c можно
2. первое констатный указатель на строку в read-only памяти, второе массив на стэке
3. чтоб const методы могли менять эти переменные

спасибо за вопросы
#170 #458982
>>458973
Вопрос был про архитектуру, а не про реализацию в конкретной библиотеке.
sage #171 #458985
>>458975
А мы с вами, неаргументированный хуесос, даже связываться не будем.
>>458974

>1


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

>2


Синтакисчески сахар вроде. Если правильно помню, в обоих случаях будет указатель на ридонли память (хотят тут от конпелятора и системы зависит).

>3


Чтоб переменную класса с этим модификатором можно было менять в const-методе. Как правило используется для мьютексов или каких-то внутренних счетчиков (последнее часто - плохой дизайн).
sage #173 #458987
>>458982
Генерируешь сигнал, он вызывает все связанные слоты. В чем вопрос тогда?
#174 #458988
>>458987
Хуй знает, но задающий рассчитывал именно на такой ответ.
#175 #458990
>>458986
ошибка же, лол
prog.cpp:5:9: error: expected unqualified-id before 'const'
int a, const aVotHui = 5;
sage #176 #458991
Все, ну вас на хуй, специальисты по байтоебству, блять. Лучше гаремник очередной посмотрю пойду, чем с тырпрайзщиками спорить. Скрипт ставьте, кстати, не зря же делал https://2ch.hk/pr/res/457262.html
#177 #458992
>>458985

>неаргументированный


Человеку, который не упомянул об RTTI при dynamic_cast, точно никогда не перезвонят.
#178 #458993
>>458990
Да, я потом только перечитал и понял, что обосрался. Сначала вообще о другом подумал.
#179 #458994
>>458979

>Разве есть разница?


Есть. В случае указателя на строку тут две сущности. Указатель и сама строка. Для указателя выделяется отдельное место в памяти, туда записывается адрес начала строки. Можно получить адрес этой указателя. В случае массива отдельного указателя не создается, при использовании данной переменной сразу подставляется адрес массива.
#180 #458996
>>458994
Путано как-то. Т.е. в случае указателя, мы в куче строку получаем таки?
#181 #458997
и сколько нынче получают те, кто знает что такое SFINAE (адская ебола какая-то)?
#182 #458998
>>458996
Строка есть и там и там, только в случае указателя есть еще и отдельная переменная с ее адресом. То есть можно сделать: char @c = "asdf"; char @@pc = @c; С массивом так не сделать.
#183 #458999
>>458997
Лол, я нисколько, я нищенка-студент оптик, который скоро пойдёт бомжевать на улицы.
sage #184 #459002
>>458992
Мы не на собеседовании. Ебал я тут распинаться перед даунами. Это во-первых. Во-вторых, мне поебать, что оно там задействует и как это что-то называется, мне важно как оно работает и какие нюансы при этом всем. Именно поэтому я пишу программы, а кукаретики пишут факториалы.
#185 #459003
>>456723
Ищу по С++ годную книжонку на рюсском в бумажном варианте. Какую посоветуете?
#186 #459005
>>458999
так иди зарабатывай кэш, одноруппник долбоеб с 0 опытом работы и практически 0 знаниями на 40к устроился спп дрочером, что вполне неплохо
>>459002
все, всё понимают, расслабься
#187 #459006
>>459003
если для начинающего я бы Шилдта посоветовал
sage #188 #459007
>>459003
Прата.
>>459005
Засчитано.
#189 #459008
>>459002

>мне важно как оно работает и какие нюансы при этом всем


Работает так, что static_cast делается при компиляции, а dynamic_cast - в рантайме, с помощью RTTI. А нюанс такой, что за пределами десктопа ни RTTI ни эксепшены часто недоступны, а без RTTI нет и дайнемик кастов.
#190 #459009
>>459005
Блджад, я разобрался с самим языком, знаю некоторые основы обработки сигналов, немного SQL с Qt, а в вакансиях всегда требуют ещё какую-нибудь хуйню, из-за чего дико ссыкую.
#191 #459011
>>459009
какой курс, город?
#192 #459013
>>459011
4, ДС2.
inb4: Ну и долбоёб, в ДС2 работу не нашёл
#193 #459014
>>459013
Алексей? лол.
sage #194 #459015
>>459008
Я знаю, ты читай внимательно:

>Лень описывать, но короче...


Если все подробно описывать, на меленькую статью хватит. У нас же не собеседование.
#195 #459016
>>459014
Мимо.
#196 #459017
>>459015

>Я знаю


Вот из этого "но короче статик самый строгий, динамик так и сяк" ясно видно, что нет.
#197 #459019
>>459017
Да запарил ты, он и сам понимает знает он или нет, мы же тут не срез по знаниям устраиваем. Это его дело, хочет работать на С++ - узнает или знает, не хочет - и не нужно тогда. Может человек просто ради интереса решил ответить на вопросы.
#198 #459021
>>459016
Ок NVM, просто много совпадений.
Английский знаешь? Базовый уровень DSP есть? В магистратуру собираешься?
#199 #459024
>>459021

> Английский знаешь?


Читать литературу, спросить дорогу и заказать пиво знания хватает.

> DSP


Нету, советуешь обмазаться?

> В магистратуру собираешься?


Да, думаю преподавать какую-нибудь околопогромистскую хуйню.
sage #200 #459026
>>459019
Хоть кто-то адекватный.
>>459017
Ты понимаешь хотя бы, что мне не всралось анонимному хуесосу доказывать, знаю ли я что-то или нет?
#201 #459027
>>459024

>Нету, советуешь обмазаться?


да не, только если не собираешься с этим работать или ради интереса.

блин, наебал я тебя, я думал щас открытые вакансии для стажеров есть, а в Питере нету(

просто хотел сказать, что требования всегда завышены, так что не очкуй, открывай резюме на hh, сами звонить будут
#202 #459032
Как жеж у меня полыхать стало после >>458920 вопросов.
Говорите книгу и страницу, с которой начать её, чтобы зашить эти дырки в знаниях, блядь1!!
#203 #459033
>>459032
любую по С++ с самого начала, лил
Мод метод Эйлера loshara #204 #459034
Двощ, помоги разобраться почему цикл делает один присест и, забивая на условие выходит из него
Сам код (функция 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;

i++;
x1=x+ih;
y1=y+h
ff(x,y);
y1=y+h(ff(x,y)+ff(x1,y1))/2;
do
{
N=N
2;
h=(b-a)/N;
x1=x+ih;
Y=y+h
ff(x,y);
Y=y+h*(ff(x,y)+ff(x1,Y))/2;
j++;
}while(fabs(Y-y1)<eps);
#205 #459035
>>459034
давай на пастебин
#206 #459036
>>459034
Ideone для кого придумали?
Аноним #207 #459037
>>459035
>>459036
пастебин?
айдеон?
что это?
#209 #459041
>>459037
В следующий раз, когда захочешь показать здесь кому-нибудь код, используй это:
http://ideone.com/
http://pastebin.com/
#210 #459044
#211 #459046
>>459034
самое время научиться использовать дебаггер))))
#212 #459047
>>459034
В условии знак другой должен быть, понимаешь как while работает?

while(fabs(Y - y1) > eps);
#213 #459048
>>459047
Правда теперь у тебя вообще всё падает.
#214 #459049
С чего начать ? есть какие-нибудь онлайн-сервисы для обучения ?
знаю основы явы и паскаля
#216 #459052
>>459049
На пикче ньюфаг–треда всё показано.
Лафоре ООП C++
Аноним #217 #459053
>>459047
>>459048
но ошибка с ебанутым циклом исправена, спасиб большое, дай Б-г тебе здоровья.
С вылетом попробую разобраться
#218 #459056
>>459033
Ну я циклы, массивы, указатели и прочее знаю, но вот как понеслось - weal_ptr, mutex - вообще какое-то говно, которое совсем чуть-чуть слышал.
#219 #459061
>>459056
ну там многое написали это не непосредственно стандарт С++ а связанные с работой программиста вещи, а что касается кастов, RTTI, умных указателей и так далее то это все можно найти в любой книге по С++. открой любую из нормальных книг и листай с начала до момента пока не перестанешь понимать, оттуда и читай.
#220 #459063
>>459061
Короче. У меня такой план. Я взял Парта и тупо выполняю все задачи, которые он задает в конце. Как только начинает валиться говно - читаю параграф, норм?
#221 #459066
#222 #459067
>>459056
Читай Амерааля про STL, Майерса с эффективными книгами и обзором модерн цпп, ещё Александреску. Про многопоточность в плюсах написал Вилльямс хорошо.
Байтоёбом будешь.
#223 #459073
>>459067

> Амерааля


Внезапно осознал, что он устарел. Но у того же Майерса есть книга про эффективный STL.
91 Кб, 758x807
#224 #459120
>>457953
Переходить на Хаскел.
#225 #459131
>>457946
Про типы уже пояснили.

>>457961

>Или использовать что-то вроде Boost.Variant.


Нахуя тащить буст? Variant лучше самому навелосипедить-накопипастить, особенно с таким неокейным пониманием.

лол, ану-с, потестим
[code]
class Variant
{
public:
\tVariant();

\tVariant(const Variant& t)
\t{
\t\tobject = (t.object);
\t}

\ttemplate <class T>
\tVariant(const T& t)
\t{
\t\ttypedef Type<T> assign_type;
\t\tobject = std::auto_ptr<assign_type>(new assign_type(t));
\t}

\ttemplate <class T>
\tVariant& operator = (const T& t)
\t{
\t\ttypedef Type<T> assign_type;
\t\tobject = std::shared_ptr<assign_type>(new assign_type(t));
\t\treturn this;
\t}

\ttemplate <class T>
\toperator T ()
\t{
\t\ttypedef Type<T> assign_type;
\t\tassign_type& Type = dynamic_cast<assign_type&>(
object);
\t\treturn Type.get();
\t}

private:

\tclass Base
\t{
\tpublic:

\t\tvirtual ~Base();
\t};

\ttypedef std::shared_ptr<Base> base_ptr;

\ttemplate <class T>
\tclass Type : public Base
\t{
\tpublic:

\t\tType(T const& t)
\t\t\t: object(t)
\t\t{
\t\t}

\t\tT get() const
\t\t{
\t\t\treturn object;
\t\t}

\tprivate:

\t\tT object;
\t};

\tbase_ptr object;
};
[/code]
#225 #459131
>>457946
Про типы уже пояснили.

>>457961

>Или использовать что-то вроде Boost.Variant.


Нахуя тащить буст? Variant лучше самому навелосипедить-накопипастить, особенно с таким неокейным пониманием.

лол, ану-с, потестим
[code]
class Variant
{
public:
\tVariant();

\tVariant(const Variant& t)
\t{
\t\tobject = (t.object);
\t}

\ttemplate <class T>
\tVariant(const T& t)
\t{
\t\ttypedef Type<T> assign_type;
\t\tobject = std::auto_ptr<assign_type>(new assign_type(t));
\t}

\ttemplate <class T>
\tVariant& operator = (const T& t)
\t{
\t\ttypedef Type<T> assign_type;
\t\tobject = std::shared_ptr<assign_type>(new assign_type(t));
\t\treturn this;
\t}

\ttemplate <class T>
\toperator T ()
\t{
\t\ttypedef Type<T> assign_type;
\t\tassign_type& Type = dynamic_cast<assign_type&>(
object);
\t\treturn Type.get();
\t}

private:

\tclass Base
\t{
\tpublic:

\t\tvirtual ~Base();
\t};

\ttypedef std::shared_ptr<Base> base_ptr;

\ttemplate <class T>
\tclass Type : public Base
\t{
\tpublic:

\t\tType(T const& t)
\t\t\t: object(t)
\t\t{
\t\t}

\t\tT get() const
\t\t{
\t\t\treturn object;
\t\t}

\tprivate:

\t\tT object;
\t};

\tbase_ptr object;
};
[/code]
sage #226 #459184
>>459131
Ебучая макака на каждом шагу ставит подножки. Обновите скрипт, исправил замену табуляции на \t, теперь заменяет все символы табуляции пробелами (количество пробелов высчитывается исходя из положения \t в строке).
#227 #459199
>>458466
Если не ты купишь, купит какой-нибудь Педалик.
C #228 #459203
Вопросец по велосипедным битовым полям. У меня имеется массив в памяти, который много раз в цикле заполняется битами. Т.е. он выделен с помощью 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. Открывающую квадратную скобку заменил на | чтобы макаба квадратные скобки не схавала.
sage #229 #459204
>>459199
Да оно не продается судя по всему, это либо глюк у конкретного провайдера, либо наебалово. А я как наивный мудак слюни распустил. Вот тут пишет, что мол занят домен: https://www.nic.ru
Пробовать за такие бабки с шансом наебалова что-то жаба давит. inb4 копейки, но нет, жаба - она такая.
sage #230 #459205
>>459203
Ну смотри. Мемсет - лишняя операция над целой областью памяти. Ты все равно проходишься по всем элементам потом, так что нахуя вызывать дополнительно мемсет? А вообще сделай массив побольше да проверь, сколько будет выполняться каждый вариант.
#231 #459216
>>459205
С точки зрения количества операций безусловно ты прав. Но я же говорю о скорости.

Если скорость побитовых операций arr|i] |= 1 << m
arr|j] &= ~(1 << m)

равна или скажем 0.9 от скорости мемсета, то вопрос вообще снимается.
sage #232 #459218
>>459216
Просто проверь и не еби себе и остальным мозг.
#233 #459240
>>459203
Зачет тебе memset, если ты можешь использовать calloc?
#234 #459267
>>459131
Если хранить данные в хипе, то вместо твоего велосипеда проще сделать для классов общий интерфейс, а в векторе - шэрд пойнтеры. Если же надо данные хранить в векторе, то надо велосипедить что-то вроде:

template <class Iface, size_t Size>
class Storage {
char m_storage[Size];
public:
Iface *get() ...
#235 #459276
Анончик, я тут читаю книжку про многопоточность и всё не могу понять, нужно ли блочить мьютексы при простом чтении данных, например:
http://pastebin.com/WEZPb1Xr
#236 #459280
>>459240
Затем что я умею внимательно читать:

>У меня имеется массив в памяти, который много раз в цикле заполняется битами.



Хотя, быть может, я не совсем удачно выразился.
Смысл в том, что он многократно целиком переписывается. Это понятно из контекста:

>или прямо по старым значениям выставлять и единички, и нули:

#237 #459281
>>459276
Зависит от ситуации. Лень описывать но тебе проще нагуглить что такое race conditions и deadlock'и. Куча примеров.
sage #238 #459317
>>459276
Если ты во всех потоках только читаешь данные, то вообще лочить необязательно. Но учти, что запись может происходить где-то внутри, если ты работаешь с высокоуровневым интерфейсом. Так что без блокировки можно обращаться к данным только тогда, когда ты абсолютно уверен в том, что делаешь.
Далее, в том же Qt, например, есть QReadWriteLock, который соответственно можно лочить на чтение, либо на запись. Причем на чтение могут лочить сколько угодно потоков одновременно, а на запись. разумеется, только один. Это так, для справки.
58 Кб, 897x383
#239 #459337
>>458527
да, сегодня норм грузится, 1.5-2 секунды на нулевую

> Я вот что скажу, у нас с тобой разные взгляды на то, как все должно быть устроено.


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

> Какие две вещи? Приложение получает запрос, обрабатывает его, отдает ответ. Что с чем смешано?


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

итак, основные поинты:
- сервер сервит не только твою борду
- если твоя борда упадет сервер ее перезапустит (можно, конечно, monit на процесс повесить)
- овер дохуя всего, чего ембед сервера не умеют (потому что нахуй они не нужны такие жирные). взгляни хотя бы на вики по lighthttpd: http auth, url rewrite (тебе, так то, не нужен), ssl/tls, статистика, ssi, подробные логи, gzip
встраиваемые веб-сервера нормально подходят для внутренних микросервисов и железок типа роутеров, встраивать вебсервер в обычный веб-сайт не оправдано ничем, ты просто выкидываешь многолетний опыт и накопленные возможности ради мифической скорости, кажущегося KISS/YAGNI/эназа_модная_аббревитура.
особенно, учитывая, что твой подход требует больше кода

> Теперь я знаю, из-за кого веб стал таким говном.


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

> Никаких проблем нет, все прекрасно работает.


ты количество кода для этого "прекрасно" видел?
и я не хочу никого обижать, но все это на уровне основной массы php3 из нулевых

посмотри на вещи следующим образом: борда - интерфейс к данным с некоторым шаблонизатором
задача твоего кода конвертировать данные, что прислал двачующий, в данные в формате базы и обратно. и только.
пик тотали рилейтед
ОТКУДА ТАМ, БЛЯДЬ, СТОЛЬКО КОДА?
58 Кб, 897x383
#239 #459337
>>458527
да, сегодня норм грузится, 1.5-2 секунды на нулевую

> Я вот что скажу, у нас с тобой разные взгляды на то, как все должно быть устроено.


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

> Какие две вещи? Приложение получает запрос, обрабатывает его, отдает ответ. Что с чем смешано?


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

итак, основные поинты:
- сервер сервит не только твою борду
- если твоя борда упадет сервер ее перезапустит (можно, конечно, monit на процесс повесить)
- овер дохуя всего, чего ембед сервера не умеют (потому что нахуй они не нужны такие жирные). взгляни хотя бы на вики по lighthttpd: http auth, url rewrite (тебе, так то, не нужен), ssl/tls, статистика, ssi, подробные логи, gzip
встраиваемые веб-сервера нормально подходят для внутренних микросервисов и железок типа роутеров, встраивать вебсервер в обычный веб-сайт не оправдано ничем, ты просто выкидываешь многолетний опыт и накопленные возможности ради мифической скорости, кажущегося KISS/YAGNI/эназа_модная_аббревитура.
особенно, учитывая, что твой подход требует больше кода

> Теперь я знаю, из-за кого веб стал таким говном.


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

> Никаких проблем нет, все прекрасно работает.


ты количество кода для этого "прекрасно" видел?
и я не хочу никого обижать, но все это на уровне основной массы php3 из нулевых

посмотри на вещи следующим образом: борда - интерфейс к данным с некоторым шаблонизатором
задача твоего кода конвертировать данные, что прислал двачующий, в данные в формате базы и обратно. и только.
пик тотали рилейтед
ОТКУДА ТАМ, БЛЯДЬ, СТОЛЬКО КОДА?
#240 #459422
Как передать массив в функции rec и nerec, не используя глобальные переменные?
TForm1 Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent
Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject Sender)

{
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))

return rec(first, mid-1, key);
else

return rec(mid+1, last, key);
}
}
#240 #459422
Как передать массив в функции rec и nerec, не используя глобальные переменные?
TForm1 Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent
Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject Sender)

{
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))

return rec(first, mid-1, key);
else

return rec(mid+1, last, key);
}
}
#241 #459424
>>459422
Ссылки/указатели выбирай что хочешь.
sage #242 #459425
>>459337

>да, сегодня норм грузится


Я же говорю, это ссаная флара. Отключил и все нормально. Я же не платил им, видимо для халявщиков скорости урезаются.

>разбивался на небольшие модули


Но зачем? Чтобы ебаться с их настройкой и состыковкой воедино?

>добрая половина этих модулей уже существует в виде библиотек


Например?

>веб-серверы


Ой все. https://ololoepepe.me/files/nginx.conf (Да, это не что-то супер-крутое, но я хочу сказать, что представляю, для чего нужны веб-серверы.)

>абсолютно нормально


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

>количество кода


Почему тебе так НЕПРИЯТНО от этого? Я правда не понимаю. Не 100к строк же, всего около 20 вместе с шаблонами и скриптами, это очень мало по сравнению с нормальными проектами.

>но все это на уровне основной массы php3 из нулевых


Г-споди, да любой бэкенд на том же уровне. Все что нового придумано - клиент-сайд скриптоговно и красивые кнопочки. Сервера как обрабатывали запросы 10 лет назад, так и сейчас обрабатывают, что там нового то изобретать?

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


Так я больше ничего и не делаю. Только конвертировать нужно разные данные, разными способами, так код и растет. Ну и бойлерплейт. Кресты в этом плане не далеко от жабы ушли по выразительности и лаконичности, щито поделать.
sage #243 #459427
>>459422
Для начала воспользуйся тегом [code] для вас же пидоров юзерскрипт писал или pastebin/ideone.
#244 #459431
>>459427
Как прикрутить этот юзерскрипт себе?
sage #245 #459432
>>459431
Браузер какой? Для лисы это делается через greasemonkey (расширение такое), для других не знаю, может аналоги есть (в хроме точно есть).
#246 #459433
>>459432
Хромоног.
#248 #459439
[code lang="C++"]
#include <iostream>
int main()
{
std::cout << "Hello world!" << std::endl;
return 0;
}

[/code]
15 Кб, 467x252
#249 #459446
>>459439
Вау, просто 10/10.
sage #250 #459452
>>459446
Скриптоговно, сэр. Оно всегда очень медленно работает, особенно когда объем данных превышает пару строк.
sage #251 #459467
>>459452
А хотя нет, это я обосрался малость. Исправил, залил.
#252 #459473
>>459424
Это мне уже говорили. Но как мне, например, объявить массив в той же форме баттонклик и затем передать его в функции рек и нерек? Или это вообще как-то иначе нужно сделать?
#253 #459494
>>459467
Ну ты пиши, пиши. Я себе чуть позже, как по-стабильнее будет, накачу.
#254 #459501
>>459473
Ты можешь просто обьявить массив как
int a[10]={1,2,3,4,5,6,7,8,9,10}
внутри своего Button1Click
В обьявлении функции добавь к примеру вот такой параметр int* a (Получаешь указатель на первый эл-т массива, он в С одновременно является и началом массива) и int size (размер массива чтоб знать сколько в нём эл-тов, ну в твоём случае будет 10 всегда, можешь и без этой переменной.

В этих функциях работаешь с ним как с обычным массивом.

Только ты должен понимать что в таком случае ты создаёшь массив на стэке каждый раз при вызове функции Button1Click и как только закрывается скобка } (Закончится эта функция) - можешь считать что этот массив в памяти уничтожен. Пользоваться ссылками или указателями на него нельзя.
#255 #459515
>>459501
Ох, спасибо огромное. Получилось.
#256 #459548
>>459467
Лел, я тебе там Pullrequest бросил с readme файлом. Ты там их смержи что ли как-нибудь.
#257 #459563
Плюсачи, посоветуйте норм компилятор IDE тоже пойдет с меня как всегда НИХУЯ
#258 #459564
>>459563
GCC GNU
Code::Blocks
loshara #259 #459568
Антоны, спасите помогите. Я всю голову сломал об этот модифицированный метод эйлера. Научил его считать корень в одном узле но только при первом приближении, т.е. когда первый раз делю шаг на два. Ок. Но на всем остально отрезке выдает нули т.к. после этого самого профитного идут одни нули
Прошу помосчи
http://pastebin.com/GfwtpkeC
sage #260 #459572
>>459548
Сделол. Алсо см. >>459569
sage #261 #459575
>>459568
Лаба? Забей на нее, говно без задач.
#262 #459581
>>459569
Надо будет дописать тогда. Это мой первый контрибьют, кстати. Надо теперь что-нибудь с кодом, но я пока мало знаю, лол.
#263 #459586
>>459568
Ты там Коши рещаешь или как?
Аноним #264 #459587
>>459575
>>459586
да при у(0)=0 функция там есть dy/dx тобишь
#265 #459588
>>459587
Что ты там за ахинею считаешь в for?
#266 #459590
>>459587
Кинь уже описание лабы, там подскажу мб чего.
#267 #459605
Если с/с++ умрет, то на какой язык все перейдут? вот сам считаю, что никогда не умрут эти два языка (особенно С), но вот уже 2 дня мучает этот вопрос
мимо не-java-php-c#-пидор
#268 #459606
>>459605
А с чего он умрет?
#269 #459607
>>459605
На другой системный. Но не думаю что это скоро произойдёт, на С/С++ уже столько кода написано, что даже не представляю как его будут менять.
#270 #459608
48 Кб, 500x597
#271 #459611
>>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к


вот от этого пичот, это и есть единственная проблема, которую я вижу, на самом то деле

> Кресты в этом плане не далеко от жабы ушли по выразительности и лаконичности, щито поделать.


у тебя какие-то другие кресты и какая-то не та жаба

[code]
server.route("POST", "/post", [&](srv::request& r, svr::response& o) -> void {
coolchan::post post = imgboard.add_post(
r.arg<int>("thread_id"),
r.arg<std::string>("post_text"),
r.arg<std::string>("captcha")
// etc.
);
});
[/code]
48 Кб, 500x597
#271 #459611
>>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к


вот от этого пичот, это и есть единственная проблема, которую я вижу, на самом то деле

> Кресты в этом плане не далеко от жабы ушли по выразительности и лаконичности, щито поделать.


у тебя какие-то другие кресты и какая-то не та жаба

[code]
server.route("POST", "/post", [&](srv::request& r, svr::response& o) -> void {
coolchan::post post = imgboard.add_post(
r.arg<int>("thread_id"),
r.arg<std::string>("post_text"),
r.arg<std::string>("captcha")
// etc.
);
});
[/code]
13 Кб, 903x225
#272 #459614
>>459611
сука, как на харкаче код вставлять то?
похуй, скриншотом положу
#273 #459616
>>459614
Да ты издеваешься? Прямо на гланге большими буквами есть ссылка на https://github.com/ololoepepe/MakabaCode/
Аноним #274 #459619
>>459588
>>459590
1) я поделил промежуток и в фор считаю корень в каждом из них
2) Решить Оду dy/dx=(y-1)/(x+1) y(0)=0
извините что долго, провайдер решил что мне хватит нефти
Аноним #275 #459620
>>459619
>>459588
точнее поделил на промежуткИИ
#276 #459621
>>459564

>Code::Blocks


А это что такое. Гуглить не буду, всё равно ничего не пойму. Расскажите про свои ощущения от пользования, что это, зачем и почему.
Аноним #277 #459624
>>459621
лучше чем dev-c++ и mingw, хоть и очень похож на последний- Интерфейс удачнее, ошибок меньше
#278 #459626
>>459621
Все хуйня это, не юзай иде в начале пути. Изучи какую-нибудь систему сборки и юзай её + модный редактор
забываю только что написанные функции хедера, при переключении в cpp файл
#279 #459628
>>459606
Я тоже не знаю почему они должны умереть.
>>459607
Системный - это какой?
#280 #459630
>>459628

>Системный - это какой?


На котором близкое к железкам ПО пишут, ОС, дрова.
#281 #459631
>>459630
Я имел ввиду пример какой-нибудь, а не что такое это такое
#282 #459634
>>459631
Линукс на С, любые дрова, Шиндошс, игры почти все на С++
#283 #459635
>>459634
Даже небо, даже аллах!
Хоть сейчас появляется тенденция писать на всяких JS и прочем, но в основе этого говна всегда лежит C++. Никуда от этого не деться.
#284 #459636
>>459635
inb4: мантры долбоеба.
#285 #459637
>>459620
Бля, я про тебя уже и забыл, мне впадлу разбираться в этой куче кода, поэтому держи набросок на коленке. Проверил матлабом, вроде бы, работает:
http://pastebin.com/jDChREDM
#286 #459641
>>459616
блядь, а куда подсветка делать то? была же
возможно это на нульче была, я не помню уже
#287 #459642
Написал физзбазз, а тред уже смыло.
[code="c++"]
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
int n = 100;

vector<int> all(n), d3(n), d5(n);

int i = 1;
generate(all.begin(), all.end(), [&i]{ return i++; });

copy_if(all.cbegin(), all.cend(), d3.begin(), [](int x) { return x % 3 == 0; });
copy_if(all.cbegin(), all.cend(), d5.begin(), [](int x) { return x % 5 == 0; });

for (int x : all) {
bool flag = true;
if (find(d3.cbegin(), d3.cend(), x) != d3.cend()) {
cout << "Fizz";
flag = false;
}
if (find(d5.cbegin(), d5.cend(), x) != d5.cend()) {
cout << "Buzz";
flag = false;
}
if (flag) cout << x;
cout << " ";
}

return 0;
}
[/code]
http://ideone.com/Hhz7jh
#287 #459642
Написал физзбазз, а тред уже смыло.
[code="c++"]
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
int n = 100;

vector<int> all(n), d3(n), d5(n);

int i = 1;
generate(all.begin(), all.end(), [&i]{ return i++; });

copy_if(all.cbegin(), all.cend(), d3.begin(), [](int x) { return x % 3 == 0; });
copy_if(all.cbegin(), all.cend(), d5.begin(), [](int x) { return x % 5 == 0; });

for (int x : all) {
bool flag = true;
if (find(d3.cbegin(), d3.cend(), x) != d3.cend()) {
cout << "Fizz";
flag = false;
}
if (find(d5.cbegin(), d5.cend(), x) != d5.cend()) {
cout << "Buzz";
flag = false;
}
if (flag) cout << x;
cout << " ";
}

return 0;
}
[/code]
http://ideone.com/Hhz7jh
#288 #459643
я даун
[code lang="c++"]
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
int n = 100;

vector<int> all(n), d3(n), d5(n);

int i = 1;
generate(all.begin(), all.end(), [&i]{ return i++; });

copy_if(all.cbegin(), all.cend(), d3.begin(), [](int x) { return x % 3 == 0; });
copy_if(all.cbegin(), all.cend(), d5.begin(), [](int x) { return x % 5 == 0; });

for (int x : all) {
bool flag = true;
if (find(d3.cbegin(), d3.cend(), x) != d3.cend()) {
cout << "Fizz";
flag = false;
}
if (find(d5.cbegin(), d5.cend(), x) != d5.cend()) {
cout << "Buzz";
flag = false;
}
if (flag) cout << x;
cout << " ";
}

return 0;
}
[/code]
#288 #459643
я даун
[code lang="c++"]
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
int n = 100;

vector<int> all(n), d3(n), d5(n);

int i = 1;
generate(all.begin(), all.end(), [&i]{ return i++; });

copy_if(all.cbegin(), all.cend(), d3.begin(), [](int x) { return x % 3 == 0; });
copy_if(all.cbegin(), all.cend(), d5.begin(), [](int x) { return x % 5 == 0; });

for (int x : all) {
bool flag = true;
if (find(d3.cbegin(), d3.cend(), x) != d3.cend()) {
cout << "Fizz";
flag = false;
}
if (find(d5.cbegin(), d5.cend(), x) != d5.cend()) {
cout << "Buzz";
flag = false;
}
if (flag) cout << x;
cout << " ";
}

return 0;
}
[/code]
#289 #459644
>>456726
Запили нумерацию строк в MakabaCode.
А если прикрутишь настройки и внедришь их в диалог настройки двачей, ваще охуенно будет.

////
Кто нибудь смог прикрутить к Opera 12?
#290 #459655
>>459644
Ты это кидай на github в раздел issues. Так куда будет удобней.
Аноним #291 #459659
>>459637
вроде работает, спасибо, но чем она отличается от моей кроме отсутствия проверки на точность?
#292 #459667
>>459659
В твоём коде происходит что-то странное с сеткой и её шагом, здесь же сетка фиксирована, как и предполагается в этом методе.
Пара советов:
1. Читай внимательнее свой код
2. Обзывай переменные как-нибудь внятно, а не a, b, h.
3. Операторы +-*/= бывает полезно разделять запятыми, так код бывает читать проще.
4. Объявляй и инициализируй переменные тогда, когда они действительно начинают использоваться, а не в самом начале.
75 Кб, 1200x600
#293 #459673
Я тут пытался запилить двусвязный список, дошел до пункта обмен двух элементов местами, тут вроде бы все очевидно, поменять стрелочки местами, но тут я столкнулся с ситуацией, когда эти элементы - соседние. Как грамотно реализовать свап без всяких проверок на соседство, разных случаев итд?
#294 #459705
>>459673
Neeqaque. Или qaque, но очень через жопу. Стремление всё обобщить - это хорошо, но иногда без обработки edge cases не обойтись.
#295 #459720
>>459673
Хули их содержимое просто не менять местами?
#296 #459721
Анон, поясни как работает vector в связке с нестандартными классами. То есть, у меня есть желание запилить вектор из элементов не стандартных типов, а описанных мной же классов. Но оно пишет что такое нельзя сделать, ибо нет метода с такими аргументами. Мне забить на вектор и юзать что-то другое, или есть способ совладать? Какой?
#297 #459722
>>459721
Штоблядь? Иди шаблоны кури.
[code]
std::vector<MyClass> kek;
kek.push_back(mykek);
[/code]
#298 #459724
>>459722
[code]
class line{
...
}
class text{
\tstd::vector<line> entireText;

public:

\ttext(line);

}

text::text(line lineToAdd){
\tentireText.end(lineToAdd);
}
[/code]
Выдаёт ошибку, говорит, мол, нет перегрузки с такими аргуметами. И да, я что, разве могу прилепить в стд свой метод с шаблонами?
#299 #459725
>>459724
\t пару раз случайно приклеился.
#300 #459726
>>459721
Отбой, я аутист и читаю жопой описание стдлиба.
#301 #459728
>>459721
Нет, лол, нихуя не отбой.
[code]
class line{
...
}
class text{
std::vector<line> entireText;

public:

text(line);

}

text::text(line lineToAdd){
entireText.insert(entireText.end(), lineToAdd);
}
[/code]
Теперь, после выхода из конструктора с параметрами
вылезает рантайм эррор. ЧЯДНТ?
#302 #459729
>>459728
И снова отбой, лол.
sage #303 #459747
>>459611

>проиграл


Хоть запроигрывайся, а картинки вообще-то можно отключать. И весят превью 5-6 КБ, а всякое жуйкуери и другие приблуды в сумме до сотен доходят. Это штук 20 картинок - считай, вся нулевая.

>ну и нахуя


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

>модульность, сервисы, микросервисы и вся ткакая ебала


Баззворд на баззворде. У меня просто немного другая архитектура, другая декомпозиция. Модули так или иначе поддерживаются в виде плагинов: фабрика р(о)утов и фабрика досок. Просто не вижу смысла базовую функциональность типа отдачи статики в плагин выносить, поэтому она сразу в коде идет.

>код


Ну ничоссе. Я тоже могу написать
[code lang="cpp"]
dispatcher().assign("/create_post", &ThreadRoute::handlePostCreation, route, 1, 2);
[/code]
Даже короче получилось (так оно в коде и есть, тащем-то, только для общего случая разного количества аргументов). Только вот ни у меня, ни у тебя не описана в примере логика проверки капчи, валидации других параметров, обращения к БД, рендеринга страницы с ошибкой, наконец. Так что не надо тут.
#304 #459750
>>459728
должны быть констуктор копирования и оператор присваивание для line
#305 #459758
>>456723
няши, помогите пожалуйста решить задачку, ну или хотя бы подскажите алгоритм. В массиве А(N,M) расположить элементы каждой строки в порядке убывания, а сами строки расположить в порядке возрастания сумм их элементов. Указатели на строки.
sage #306 #459782
>>459758
Насколько помню, для этого нужен рекурсивный драйвер ядра. Придется применить ДДоС атаку на процессор.
sage #307 #459820
>>459758
А в чем проблема?
sage #308 #459822
>>459820
В его ДНК.
Аноним #309 #459936
>>459667
если интересно, я таки ее добил), спасибо за помощь и советы.
#310 #459940
>>459721
Дело точно не в векторе, а что-то не так в описанных тобою классах. Дальше не читал.
sage #311 #459949
>>459936
Интересно было твою мамашу в очко жарить, а лабы твои не интересны.
#312 #459952
>>459758
ну няши, подскажите алгоритм))
sage #313 #459955
>>459758
>>459952
sortBy (compare `on` sum) . map (reverse . sort)
Аноним #314 #459960
>>459949
о пап привет, так ты ж от спида сдох, после того как тебя какой-то тип в шоколадный долбил))))000
#315 #459961
>>459955
ну блин((, а можно как-нибудь по-другому?
#316 #459962
ololoepepe, скажи с чего Qt начать? Тупо набирать исходники на сайте? Или есть какая-нибудь годнота для ньюфагов?
sage #317 #459963
>>459960
Ясно, малыш, ясно. Пожалуйся мамочке, она попку кремом смажет, будет не так больно.
sage #318 #459964
>>459962

>ololoepepe


Это кто? Какая-то новая неймфаго-мразь?
#319 #459965
>>459964
Нет, он годный кун. Запилил юзерскрипт, который чинит [code][/code] тэг. Я у него на Github нашел кучу Qt репозиториев. Довольно интересные программы, поэтому и интересуюсь непосредственно у него.
sage #320 #459968
>>459965
Ну бля, что ж ты намеков то не понимаешь, не надо из меня неймфага делать. Почта же есть, если уж сильно надо, ну.

Бланшет, Саммерфилд. Еще Шлее. У них учебники. Но мне не понравилось, например. Я делал так: брал задачу (на тот момент хотел запилить скачивание картинок с тредов, такой специфический менеджер закачек), пытался сделать, смотрел примеры, гуглил и т.д. Код получался ужасный, но со временем появлялся опыт и код становился лучше. На практике приобретаются знания и навыки, которые никакой учебник не даст.
И еще, очень хорошо будет взять какой-нибудь проект, скажем, в вузике (если ты студент), или даже просто знакомым что-то запилить. Похуй что бесплатно. Ответственность минимальная, но она есть, и это мотивирует, также как и то, что твое поделие кто-то использует, находит баги, реквестит фичи и все такое. Для карьерного роста пользы почти нет, для профессионального - очень даже.
#321 #459971
>>459955
Каррирую этого дабла композитора.
#322 #459978
>>459968
Да мне просто надо к четвергу запилить GUI. Вернее как. Мой воображаемый дедлайн и тз требуют запилить программку для вузика охуенно, но на деле надо показать довольно простую хуйню.

Надо сделать два окошечка - пикрелейдет.
Первый пик:
Основнок окно. Надо запилить несколько вкладочек, в которых отображать информацию. Достаточно будет тупо текст, на крайний случай таблицы. Туда вся информация должна выводиться.

Второй пик:
Заполнение матриц. Первые два квадрата - две матрицы(т.е. таблицы, которые можно заполнить). Неплохо было бы запилить ресайз.
Последняя колонка всякие конфиги и кнопочки. Тыкаешь кнопку start, и gui сбрасывают в соснольку данные, которая вычисляет и отсылает данные обратно в stdout.
Gui парсят ответ и вкидывают пользователю окошечко с полученным результатом.
6 Кб, 800x600
9 Кб, 800x600
#323 #459979
>>459978
Пики отклеились.

>>459968

>Почта же есть


Не видел почты, извиняюсь.
sage #324 #459984
>>459978
>>459979
Весьма тонкий реквест "сделай мне лабу". Но хуй с тобой.

>несколько вкладочек


QTabWidget

>тупо текст


QPlainTextEdit

>таблицы


QTableWidget

>ресайз


Если ты о ресайзе элементов окна (виджетов), то QLayout и производные от него. Если о ресайзе таблицы, то QTableWidget::setRowCount, QTableWidget::setColumnCount (но, насколько я помню, там еще надо будет в пустые клетки запихать виджеты, лучше погугли).

>всякие конфиги


QFormLayout в помощь.

>кнопку start


Хорошее решение - QDialogButtonBox внизу, на который уже добавляются кнопки QDialogButtonBox::addButton.

>Не видел почты, извиняюсь.


Посмотри в любом README на гитхабе (ну кроме MakabaCode, там не указывал его).
#325 #459991
>>456723
подскажите пожалуйста, как расположить строки матрицы в порядке возрастания сумм её элементов, используя указатели>>456723
?
sage #326 #459995
>>459991
Берешь указатель на строку, считаешь сумму, сравниваешь с суммой другой строки, если надо - меняешь местами.
sage #327 #460003
[code lang="cpp"]
int main()
{
qsrand(QDateTime::currentMSecsSinceEpoch());
int a = new int *[3];
for (int i = 0; i < 3; ++i) {
a = new int[4];
for (int j = 0; j < 4; ++j)
a[j] = qrand();
}
for (int i = 0; i < 3; ++i)
qDebug() << a[0] << a[1] << a[2] << a[3];
for (int i = 0; i < 2; ++i) {
int s1 = 0;
for (int j = 0; j < 4; ++j)
s1 += a[j];
int s2 = 0;
for (int j = 0; j < 4; ++j)
s2 += a[i + 1][j];
if (s2 < s1)
qSwap(a, a[i + 1]);
}
qDebug() << "===========";
for (int i = 0; i < 3; ++i)
qDebug() << a[0] << a[1] << a[2] << a[3];
return 0;
}
[/code]
sage #327 #460003
[code lang="cpp"]
int main()
{
qsrand(QDateTime::currentMSecsSinceEpoch());
int a = new int *[3];
for (int i = 0; i < 3; ++i) {
a = new int[4];
for (int j = 0; j < 4; ++j)
a[j] = qrand();
}
for (int i = 0; i < 3; ++i)
qDebug() << a[0] << a[1] << a[2] << a[3];
for (int i = 0; i < 2; ++i) {
int s1 = 0;
for (int j = 0; j < 4; ++j)
s1 += a[j];
int s2 = 0;
for (int j = 0; j < 4; ++j)
s2 += a[i + 1][j];
if (s2 < s1)
qSwap(a, a[i + 1]);
}
qDebug() << "===========";
for (int i = 0; i < 3; ++i)
qDebug() << a[0] << a[1] << a[2] << a[3];
return 0;
}
[/code]
438 Кб, 1920x1040
#328 #460033
>>456723
Внутри QMainWindow есть QWidget (на кртинке справа), в нем находится QGridLayout (в котором все эти спинбоксы и пара кнопок). Как сделать так, чтобы он притягивался к верхней грани, а не к центру?
sage #329 #460042
>>460033
[code lang="cpp"]
QWidget w = new QWidget;
QVBoxLayout
vlt = new QVBoxLayout(w);
QGridLayout *glt = new QGridLayout;
vlt->addLayout(glt);
vlt->addStretch();
[/code]
#330 #460046
>>460042
Спасибо, работает. Но почему такие костыли? Я думал все должно быть проще, типа alignment или gravity какой-нибудь. Или это я что-то не так делаю и подобный элемент надо пилить по-другому?
#331 #460076
>>459984

>Весьма тонкий реквест "сделай мне лабу". Но хуй с тобой.


Было бы неплохо, если бы у нас в вузе были бы лабы по программированию.
Было бы неплохо, если бы у нас в вузе объясняли Qt.
Было бы неплохо, если бы мы писали на крестах.

Олсо, звучит все дохуя сложно. Именно таблицы, особенно. Буду гуглить и доебываться в треде.
#332 #460080
>>459995
ну вот допустим посчитана сумма первой строки, куда её занести чтобы она осталась? нужно создавать ещё один массив?
sage #333 #460087
>>460080
В глаза ебешься? >>460003
sage #334 #460090
>>460046
Это в ваших говно-хтмлях костыли типа alignment'а, в результате чего в 2015 году нельзя нормально произвольный элемент горизонтально выровнять иначе чем с помощью deprecated-тега <center>. А у нас в Qt все именно так, как и должно быть.
#335 #460091
>>460087
да блин, я не понимаю этот код, объясни пожалуйста подробно как этот код работает))
sage #336 #460093
>>460076

>Было бы неплохо, если бы у нас в вузе были бы лабы по программированию.


У нас были, но на дельфи, уровня "накидай на формочку элементы".

>Было бы неплохо, если бы у нас в вузе объясняли Qt.


У нас не объясняли.

>Было бы неплохо, если бы мы писали на крестах.


Все писали на дельфи, я писал на крестах. Недавно на госах:
- Так, Бов, готов?
- Готов!
- Да ты, Б
ов, всегда готов, можно и не проверять.

Это я к чему: сам учиться не будешь, никакие вузы тебя не научат. Ну и похвастаться какой я у мамы молодец, че уж там.
sage #337 #460095
>>460091
Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
#338 #460096
>>460093
Ну вот у меня подобная ситуация на парах. Препод за умного считает, кек.
#339 #460098
>>460090
Но я не знаю html!
А gravity это из ведроида. Ведь это было бы более естественно, задаешь куда оно примагничивается, а не создаешь целый новый слой только для того, чтобы он выравнивал куда тебе надо. Да еще и такой непонятной функцией, как addStretch. Если бы я читал такой код, то захотел бы настучать программисту по башке за то, что названия функций не соответствуют тому, что они делают.
#340 #460100
>>460095
вот ты юморист))
но я на первом курсе((
sage #341 #460101
>>460098

>ведроида


Сначала не хотел дальше читать, но потом прочитал, и понял, что не зря не хотел.
Изучи для начала доки, туториалы, потом уже высказывай мнение, ну. "Не как на ведроиде" - это скорее комплимент.
sage #342 #460102
>>460100
Подожди до второго, осталась пара месяцев.
#343 #460103
>>460101

>Изучи какие охуенные мы делаем костыли вместо того, чтобы по-человечески выравнивать элементы.


Ну объясни мне, умник, каким образом addStretch() связана с выравниванием и как я об этом должен догадаться?
sage #344 #460105
>>460103
Читать документацию надо, и все будет понятно. addStretch добавляет элемент-спэйсер, это удобнее alignment'ов и gravity. Шел бы ты на свой андроид, раз не нравится.
#345 #460107
>>460102
ну няша, ну перепиши это решение в более понятном виде))
sage #346 #460109
>>460107
Не перепишу.
#347 #460112
>>460109
почему?:(
sage #348 #460113
>>460112
Прост))
#349 #460114
>>460105
Не надо быть таким нервным. Если ты привык к чему-то это не значит, что это единственно верное и истинное решение.
sage #350 #460115
>>460114

>Если ты привык к чему-то это не значит, что это единственно верное и истинное решение.


>Ведь это было бы более естественно, задаешь куда оно примагничивается, а не создаешь целый новый слой только для того, чтобы он выравнивал куда тебе надо.


Понятно.
#351 #460116
>>460115
Я рад что тебе все понятно.
#352 #460142
>>459634
Ты, блять, ебанутый? Я просил пример языка, а не пример продукта.
Ты думаешь что я серьезно не знаю этих вещей?
#353 #460143
>>460142
Какой-нибудь новомодный D или Rust
#354 #460147
>>460112
Потому что мы тут всей доской заняты групповым изнасилованием всей твоей семьи.
#355 #460159
Вопрос на миллион. Как конвертировать std::vector в std::vector<std::vector> ?
Т.е. как преобразовать обычный вектор в двумерную матрицу. Олсо программа должна работать с квадратными матрицами, но надо бы проверочку запилить.
Сейчас я застрял на вопросе - как определить, можно ли вектор преобразовать в квадратную матрицу. Например, если std::vector.size() = 9, то надо построить матрицу 3х3, но если равно, например, 8, то нужно выдать сообщение об ошибке(?)
#356 #460163
>>460159
Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
#357 #460164
>>460159
погугли квадратный корень
sage #358 #460165
>>460159
Легко.
[code lang="cpp"]
auto matrix = convertToMatrix(vector);
[/code]
#359 #460166
>>456723
няши, подскажите способов как можно обратиться к элементам динамического двумерного массива))
и скажите , можно ли обращаться к элементам такого массива таким образом: ((arr+i)+j)?
#360 #460167
>>460164
У меня была идея такая, однако дальше вычисления его не ушел.
sqrt(9) = 3 - можно вычислять.
sqrt(8) = 2.82 - идешь нахуй.

И как принимать условие?
if(vector.size() == pow(sqrt(vector.size()), 2))
{//doConvert} else {//doError}

>>460165

>convertToMatrix


Че за метод? Небось опять этот ваш Qt?
sage #361 #460168
>>460166
[code lang="cpp"]
a[j];
[/code]
sage #362 #460169
#363 #460172
>>460166
Также как и к элементам обычного, в крестах и сишке для обычных массивов a[j] - то же самое что и ((a+i)+j)
sage #364 #460173
>>460167
Погугли еще что такое сарказм.
#365 #460175
>>460173
Лучше бы методы предложил, злодей.
#366 #460176
>>460159
Ладно, няша, палю годноту: тебе не нужен вектор векторов, ты можешь просто высчитывать индекс в изначальном векторе
типа v[ i * n + j ]
#367 #460186
>>459724
.push_back блеать. Иди читай документацию! www.cplusplus.com/reference/vector/vector/
34 Кб, 965x542
#368 #460188
>>456723
няши, подскажите пожалуйста как исправить ошибку:3
sage #369 #460189
>>460188
Ошибки в ДНК неисправимы.
34 Кб, 599x449
#370 #460190
>>460188
перепиши это, блядь, немедленно
ты же сам в этом аду не ориентируешься
#371 #460192
>>460189
и всё-таки, помоги пожалуйста, в конце-концов я только учусь))
#372 #460193
>>460190
http://pastebin.com/CQ3tGk85
вот весь код, помоги пожалуйста)
sage #373 #460194
Сука, как меня доебал этот смайлопетух. Моча, запрети его нахуй.
#374 #460195
>>460188
очевидно, что у тебя слева указатель на инт, а справа инт
sage #375 #460197
>>460194
Да это шлюха же. Она уже пару лаб тут выпрашивала.
#376 #460200
>>460197
Почему я тогда не видел сисек в треде?
#377 #460206
>>460197
Я не шлюха
#378 #460209
>>460206
Какая разница? Просто съеби.
sage #379 #460215
>>460197

>Да это шлюха же.


Все, теперь я все понял. Я то думал, как же человек может быть таким тупым и отбитым. Но для шлюхи то это норма.
#380 #460223
>>460188
Я вообще боюсь скринов с++. Но даж мне очевидно, что ошибки тебе студия написала прямым текстом. И да. Перепиши. В таком говне и 10 скобочек можно проебать.
#381 #460224
>>460188
Тебе, плебей, сраный скрипт написали. Ну или хотя бы обертывай свой код в тэг.
22 Кб, 322x355
#382 #460228
>>459747

> Баззворд на баззворде


а то

> Модули так или иначе поддерживаются в виде плагинов: фабрика р(о)утов и фабрика досок.


странная у тебя какая-то декомпозиция я бы сказал что ее нет, все пермешано и перепутано
есть же проверенная десятилетиями схема: дал(база, фс) <=> сервис("бизнес логика") <=> вью(хттп а твоем случае)

да еще и на каждый раздел по классу, ну что это за говно?

> 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к. без ущерба функциональности и читаемости хуже ее здесь не сделать, ящитаю, я минут десять бродил по репе в попытках понять, что же от чего зависит и кем вызывается
22 Кб, 322x355
#382 #460228
>>459747

> Баззворд на баззворде


а то

> Модули так или иначе поддерживаются в виде плагинов: фабрика р(о)утов и фабрика досок.


странная у тебя какая-то декомпозиция я бы сказал что ее нет, все пермешано и перепутано
есть же проверенная десятилетиями схема: дал(база, фс) <=> сервис("бизнес логика") <=> вью(хттп а твоем случае)

да еще и на каждый раздел по классу, ну что это за говно?

> 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к. без ущерба функциональности и читаемости хуже ее здесь не сделать, ящитаю, я минут десять бродил по репе в попытках понять, что же от чего зависит и кем вызывается
#383 #460229
Есть 1 класс с чисто виртуальным деструктором и чисто виртуальной функцией, класс этот экспортируется из dll
Когда я наследуюсь от него, то получаю 4 link2019 на дефолтные конструкторы\операторы присваивания и на деструктор.
Что я делаю не так? обоссыте, но не выгоняйте
алсо, интерфейс и класс его реализуемый лежат в двух разных dllaх
#385 #460237
>>460231
Почему же этот вариант http://pastebin.com/aEjsKpMK из библиотеки SFML работает так, как ожидается?
2447 Кб, 450x337
#387 #460244
>>460193
stdout распидоралисо слегка
http://ideone.com/R04o96

1. не используй, блядь, *(arr + i) нотацию
2. не используй, блядь, динамические массивы динамических массивов, если точно не уверен, что надо
3. не используй, блядь, транслит
4. называй, блядь, переменные нормально
#388 #460248
>>460229

> чисто виртуальным деструктором


не должно быть такой хуйни, вообще
у всех родителей всегда опустим всякие ебнутые ситуации вызывается деструктор, а это значит, что он обязан быть даже в "интерфейсах"
оптимизатор его, кстати, все равно вырежет нахуй, так что можешь не беспокоиться
#389 #460249
>>460237
потому что он не чисто виртуальный, у него есть имплементация, пусть и пустая и никому не нужная
#390 #460259
>>460248
Знаю про эту хуйню, не знаю почему написал.
В общем проблема осталась
>>460249
Только что проверил - нету
никакой реализации
>>460238
Первая ссылка предлагает сделать мне Construct & Release методы - мне это не нужно
Ну так почему же вот тут все нормально и ожидаемо ? >>460237
алсо, вот щас вынес деструктор помеченный макросом экспорта в cpp файл и все заработало. Почему это произошло?
#391 #460260
>>460259

>В общем, проблема осталась


Снята проблема, но осталась старая и поднята новая

>Почему вот тут все нормально и ожидаемо ? >>460237


>вынес деструктор помеченный макросом экспорта в cpp файл и все заработало. Почему это произошло?

74 Кб, 600x349
#392 #460263
>>460259

> Только что проверил - нету


> никакой реализации


в глаза ебешься?

> virtual ~Drawable() {}


> {}

#393 #460266
>>460263
Ну ты серьезно?
#394 #460277
Бляяядская макаба стерла мой сраный пост!
Ещё раз.

Есть json файл, который содержит кучу объектов, каждый из которых имеет два массива и одно число. Этот файл подается на вход программе и должен быть обработан.

1. Паринг json файла.
Входные данные я преобразовываю так: массивы => vector, int => int. Полученные вектора отправляю в списки. Вот так я храню их, своего рода очередь.

struct Queue
{
\tstd::list<std::vector<double> > matrixA; //список с первыми матрицами
\tstd::list<std::vector<double> > matrixB; //список со вторыми матрицами
\tstd::list<int> precision; //список чисел
\tunsigned 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. Многопоточность. Какие варианты реализации возможны? Я, например, хотел бы сделать отдельный поток, который вычисляет всю парашу, а второй поток общается с первым и примерно сообщает о количестве выполненных операций.
#394 #460277
Бляяядская макаба стерла мой сраный пост!
Ещё раз.

Есть json файл, который содержит кучу объектов, каждый из которых имеет два массива и одно число. Этот файл подается на вход программе и должен быть обработан.

1. Паринг json файла.
Входные данные я преобразовываю так: массивы => vector, int => int. Полученные вектора отправляю в списки. Вот так я храню их, своего рода очередь.

struct Queue
{
\tstd::list<std::vector<double> > matrixA; //список с первыми матрицами
\tstd::list<std::vector<double> > matrixB; //список со вторыми матрицами
\tstd::list<int> precision; //список чисел
\tunsigned 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. Многопоточность. Какие варианты реализации возможны? Я, например, хотел бы сделать отдельный поток, который вычисляет всю парашу, а второй поток общается с первым и примерно сообщает о количестве выполненных операций.
#395 #460278
>>460277
Блядь, проебался с разметкой. Прошу прощения.
sage #396 #460317
>>460228

>эксепшон


Все, больше мне с тобой говорить не о чем.
#397 #460354
>>460277
Создаешь класс/структуру для представления объекта - в нем два вектора и число. В одном потоке открываешь файл и читаешь-создаешь по очереди объекты и ложишь их в очередь. Выбираешь какой-то граничный размер очереди, если в очереди находится больше объектов то приостанавливаешь поток на несколько миллисекунд, смотря сколько твои объекты нужно обрабатывать и какой размер очереди (это чтобы очередь не разрасталась до огромных размеров). В другом потоке вытаскиваешь объекты из очереди и обрабатываешь их. В зависимости от характера работы над объектами и системных ресурсов объекты можно вытаскивать и обрабатывать в несколько потоков - конкретное эффективное количество потоков завист от системы, больше не обязательно лучше. Алсо очередь это оперции enqueue и dequeue, то что ты там накалякал это массив. Если будешь делать многопоточность то нужна блокировка на доступ к очереди (это сильно замедлит работу, если объекты обрабатываются быстро) или нужна потокобезопасная неблокирующая очередь.
sage #398 #460366
>>460277
[code lang="cpp"]
class MyClass : public QRunnable
{
//...
void run() { /.../ }
};

MyClass worker;
QThreadPool::start(&worker);
[/code]
И не изобретай велосипед.
#399 #460367
>>460366
Но ведь я без Qt пилю.
sage #400 #460368
>>460366
Бля, вот так, разумеется:
[code lang="cpp"]
MyClass *worker = new MyClass;
QThreadPool::start(worker);
[/code]
sage #401 #460369
>>460367

>Но я ведь говно ем.


Ну ок.
#402 #460378
>>456723

>"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.


Не идут. Держите платиновые вопросы:

1) Как проверить существование директории КРОССПЛАТФОРМЕННО?

2) Как создать директорию КРОССПЛАТФОРМЕННО?

Т.е. никаких вин-апи и прочего. Нужно, чтобы под линуксом, бсд и виндой код работал. Чтобы вы понимали, что вопрос вполне разрешим, приведу пример КРОССПЛАТФОРМЕННОЙ проверки существования файла на C++11 в одну строчку:

bool file_exists(const std::string& filename)
{
return std::ifstream(filename).is_open();
}
sage #403 #460380
>>460378

>Не идут.


Идут.

>Как проверить существование директории КРОССПЛАТФОРМЕННО?


[code lang="cpp"]
QFileInfo("/path/to/dir").isDir();
[/code]

>Как создать директорию КРОССПЛАТФОРМЕННО?


[code lang="cpp"]
QDir::mkpath("/path/to/dir");
[/code]
#404 #460383
>>460354

>ложишь их в очередь.


Я короче погуглил и нашел std::queue. Пойдет в качестве альтернативы.

Олсо, как писать в очередь? Предположим, что у нас очередь 10 записей. Программа отработала с 5 объектами, очередь нужно пополнить. Как туда это записывать, чтобы все вычислялось правильно?

Теперь за потоки. Как не обосраться? Ведь два потока будут работать с одной очередью, а значит, что один может без проблем прочитать недописанные данные. Как этого избежать?
Блокировать очередь на время пополнения, потом блокировать её на время чтения?
#405 #460384
#406 #460406
>>460383

> Олсо, как писать в очередь?


Не совсем понятно что тебя смущает. Поток смотрит на размер очереди. Если она больше чем 20 (например) поток засыпает на 1 (например) миллисекунду, если меньше, читает из файла следующий объект и ложит его в очередь, потом все повторяется.
#407 #460426
>>460406
Так-с. С deque я вроде бы немного разобрался. Теперь как сделать все по уму?
Мне в голову пришла мысль написать класс Queue, что-то типа такого:

[code lang="cpp"]
template <typename T>
class Queue
{
private:
\tstd::deque<T> deque;
public:
\tvoid push(T const& value);
\tT pop();
};
[/code]

И, например, в функции main открывается первый поток, который создает объект типа Queue и начинает оттуда читать данные.
А в основном потоке мы просто храним ссылку на этот же объект, и читаем оттуда. Функция pop возвращает нужную нам структуру обратно и подчищает список. Ну и в этих функция реализован механизм блокировки потоков.
#408 #460582
Суки блядь, вы еще над AbstractSingletonProxyFactoryBean смеетесь.
# define BOOST_MPL_PP_DEF_PARAMS_TAIL_0(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1 v(),p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v())

Ссылка на это же говно ебучее с подсветочкой синтаксиса
http://pastebin.com/LLPFXaxM

Это еще заебись, там есть макросы, которые и просто конкатенируют(!) текстовые преставления(!!!). И вокруг тимплейтов это наворачивают.

Это не язык программирования, это лексически-синтаксическая ХУИТА.
#409 #460592
>>460426
Блядь, у меня дико пылает. Просто неимоверная жопная боль от своей тупости.

Короче этот сраный mutex. Хули с ним делать-то??? Прочитал в документации, что он moveable, но не копируемый. Окей. Ебеся дальше.

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

[code lang="cpp"]
template <typename T> class Queue{
private:
\tconst unsigned int MAX = 5;
\tstd::deque<T>\t\t\tnewQueue;
\tstd::mutex d_mutex;

\tstd::condition_variable d_condition;
public:
\tvoid push(T const& value)
\t{

\t\t{
\t\t\tstd::unique_lock<std::mutex> lock(this->d_mutex);
\t\t\tnewQueue.push_front(value);
\t\t}
\t\tthis->d_condition.notify_one();
\t}
\tT pop()
\t{
\t\tstd::unique_lock<std::mutex> lock(this->d_mutex);
\t\tthis->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); });
\t\tT rc(std::move(this->newQueue.back()));
\t\tthis->newQueue.pop_back();
\t\treturn rc;
\t}

};
[/code]

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

Заебашил функцию

[code lang="cpp"]
void buildQueue(Queue<MyStruct> &taskQueue)
{
\t;
}

//Пишу в main
int main()
{
Queue<MyStruct> tasks;
std::thread t1(buildQueue, tasks);
return 0;
}
[/code]

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

error C2280: 'std::mutex::mutex(const std::mutex &)' : attempting to reference a deleted function;
Че это за говно такое?

Но это ещё говно. Пытается ссылаться на удаленную функцию. Окей, нахуй thread. Пишу
[code lang="cpp"]
buildQueue(tasks);
[/code]

И что происходит? Программа без проблем компилируется, блядь! Что за говно! Почему мои руки настолько из жопы! Помогите решить, блядь.
#409 #460592
>>460426
Блядь, у меня дико пылает. Просто неимоверная жопная боль от своей тупости.

Короче этот сраный mutex. Хули с ним делать-то??? Прочитал в документации, что он moveable, но не копируемый. Окей. Ебеся дальше.

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

[code lang="cpp"]
template <typename T> class Queue{
private:
\tconst unsigned int MAX = 5;
\tstd::deque<T>\t\t\tnewQueue;
\tstd::mutex d_mutex;

\tstd::condition_variable d_condition;
public:
\tvoid push(T const& value)
\t{

\t\t{
\t\t\tstd::unique_lock<std::mutex> lock(this->d_mutex);
\t\t\tnewQueue.push_front(value);
\t\t}
\t\tthis->d_condition.notify_one();
\t}
\tT pop()
\t{
\t\tstd::unique_lock<std::mutex> lock(this->d_mutex);
\t\tthis->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); });
\t\tT rc(std::move(this->newQueue.back()));
\t\tthis->newQueue.pop_back();
\t\treturn rc;
\t}

};
[/code]

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

Заебашил функцию

[code lang="cpp"]
void buildQueue(Queue<MyStruct> &taskQueue)
{
\t;
}

//Пишу в main
int main()
{
Queue<MyStruct> tasks;
std::thread t1(buildQueue, tasks);
return 0;
}
[/code]

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

error C2280: 'std::mutex::mutex(const std::mutex &)' : attempting to reference a deleted function;
Че это за говно такое?

Но это ещё говно. Пытается ссылаться на удаленную функцию. Окей, нахуй thread. Пишу
[code lang="cpp"]
buildQueue(tasks);
[/code]

И что происходит? Программа без проблем компилируется, блядь! Что за говно! Почему мои руки настолько из жопы! Помогите решить, блядь.
#410 #460594
Еще одна жемчужина мысли boost-программиста:
http://pastebin.com/sjUDQt8A

Никаких препроцессоных условных директив там нет, есличо!
#411 #460601
>>460592

>std::mutex::mutex(const std::mutex &)


Это похоже на конструктор копирования, тоесть твоя очередь таки копируется, попробуй std::ref
sage #412 #460613
>>460582

>boost


Кто бы сомневался. Выкинь это говно.
#413 #460721
>>460380
Почему? Я же привёл кроссплатформенный способ узнать, существует ли файл, средствами самого языка.
#414 #460733
>>460721
Разве твой костыль не наебнется на проверке существования файла который закрыт для записи?
sage #415 #460751
>>460721
Во-первых, как правильно заметил >>460733, твой способ говно. Во-вторых, тебе же не файл надо проверить, а папку.
Если совсем уж впадлу использовать библиотеку богов, то хоть посмотри исходники упомянутых мной методов и спизди их.
#416 #460776
>>460592
Все говно аноны, я починил эту парашу, но это говенная реализация. Пока пердолился, нашел producer-consumer паттерн, но на крестах нет, только на C. Но реализовать дико хочется.

Мультитрединг это так охуенно. Сука! Но страданий дохуя.

Олсо, поясните за строчку:

[code lang="cpp"]
this->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); });
[/code]
Что тут вообще происходит? Ну я знаю, что это ламда функция, которая возвращает указатель(?). А что дальше происходит?

Ещё охуительный вопрос.
Мой люкссофт создает 3 матрицы и 1 число, которое нужно поместить в документ .tex. Ясно дело, что там должны быть и другие данные. Типа заголовок, настройки файла и т.д.
Какие способы писать в файл есть? Сейчас я просто топорно пишу нужные мне строки в пустой файл.
sage #417 #460870
>>460776

>Ну я знаю, что это ламда функция, которая возвращает указатель(?).


Проиграл с тебя. Она возвращает true, если очередь не пуста, и false, если пуста.
Соответственно, если возвращается false (очередь пуста), то блокировки не происходит.
#418 #460915
Хочу для души попрогать на крестах. С последним стандартом, с бустом, со всеми прикольными штуками, короч.
Что мне надо накатить? (Желательно, для винды)
#419 #460918
>>460915
MSVS Express и 100 gramm dlja dushi
#420 #460939
>>460870
[code lang="cpp"]
this->d_condition.wait(lock, [=]{ return !this->newQueue.empty(); });
[/code]
А что тогда в этой строке происходит?
#421 #460966
>>460939
Тред ждёт выполнение условия из лямбды, после чего лочится переданный std::unique_lock.
sage #422 #460974
>>460966
Еблан что ли? Доки читайhttp://www.cplusplus.com/reference/condition_variable/condition_variable/wait/
Если предикат вернет false, блокировки не произойдет. Нихуя оно не ждет.
#423 #460985
>>460733
С чего это он наебнётся? Я делаю проверку на возможность чтения, а не записи.

>>460751
Не наебнётся же, читай выше. Или может наебнуться? Как?

Ну и да, почему Qt, а не буст?
sage #424 #460999
>>460985
Потому что буст - некрасивое говно. Но для данного случая вообще похуй откуда брать исходники, так что хоть из wxWidgets, если так нравится кушать какашки.
#425 #461011
>>456723
Не буду пинать труп Qt-треда, спрошу здесь:
Допустим, у меня есть QGrphicsScene, в которой лежит несколько айтемов, один из которых QGraphicsPixmapItem. Есть ли в Qt стандартные способы узнать в какой из пикселей этого пиксмапа я тыкнул мышкой, учитывая что этот айтем может менять масштаб (setScale()), а сцена лежит в QGraphicsView, который в свою очередь имеет скроллбары.
sage #426 #461013
>>461011
Можно, но ебано весьма. Сначала определяешь, по какому итему тыкнули, потом находишь его координаты во вьюхе с учетом всяких скроллбаров (вроде видимая часть называется вьюпорт, вот относительно него надо высчитывать), потом сравниваешь с точкой, куда ткнули. Естественно, учитываешь масштаб (алгоритм сам придумай, там несложно, но мне лениво).
#427 #461018
>>461013
Ок, спасибо. Я тут подумал, наверное лучше будет наследоваться от QGraphicsScene и перехватывать всякие QGraphicsSceneMouseEvent. В них вроде есть вся инфа (pos, scenePos, screenPos). Но это опять же куча гемора.
sage #428 #461033
>>461018
Используй QObject::eventFilter, нахуя от сцены то наследоваться. В любом случае тебе придется вычислять все мной выше перечисленное, способ перехвата события нажатия мыши с вычислением никак не связан.
#429 #461209
Давайте ещё раз поясняем мне за жизнь.

[code lang="cpp"]
void push(T const& value)
{

{ //Нахуя эти скобочки?
//Выжидаем, когда 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()));

//чистим
this->newQueue.pop_back();
return rc;
}
[/code]
#429 #461209
Давайте ещё раз поясняем мне за жизнь.

[code lang="cpp"]
void push(T const& value)
{

{ //Нахуя эти скобочки?
//Выжидаем, когда 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()));

//чистим
this->newQueue.pop_back();
return rc;
}
[/code]
sage #430 #461238
>>461209

>Нахуя эти скобочки?


Блок в скобках - скоуп. Когда выходим из скоупа, все что в нем объявлено на стеке - удаляется. То есть будет вызван деструктор переменной lock и она больше не будет доступна. btw, лок это нечто типа паттерна - объект, лочащий мьютекс и разлочивающий при разрушении. Удобно, когда неизвестно, где будет выход из скоупа. В данном случае - варварский костыль, здесь бы хватило и простого лок\анлок.
#431 #461247
>>461238
А про остальное написал описал нормально? Просто не до конца вгоняю в концепцию.

Олсо, нагуглил вот этот T rc(std::move..). Что это вообще за конструкция?

Там на место T идет моя структура, но что это вообще такое?
sage #432 #461256
>>461247

>Передаем его в wait


Ты лок передаешь туда, а не мьютекс. И еще, я тебе уже писал, но ты в глаза ебешься:

>Еблан что ли? Доки читай http://www.cplusplus.com/reference/condition_variable/condition_variable/wait/


>Если предикат вернет false, блокировки не произойдет. Нихуя оно не ждет.


>Нихуя оно не ждет. Предикат выполняется сразу при вызове wait, и в зависимости от него wait либо будет ждать, либо моментально разлочит мьютекс.


Далее.

>std::move


Гугли lvalue, rvalue. Если сложно, то забей пока на это байтоебское говно, оно в 99.99999% задач нахуй не всралось.
А вообще у тебя какой-то говнокод, но это с опытом приходит, ничего.
#433 #461261
>>461256

>Ты лок передаешь туда,


А что такое lock по своей сущности, лол?

Да я весь вечер охуваю. Сначала писал, вроде бы, нормально получалось. Лег спать. Открываю с утра - ЛЮТЫЙ ГОВНОКОД. Сегодня дописывал - плакал. Надо будет зарефакторить.
sage #434 #461267
>>461261

>А что такое lock по своей сущности, лол?


Ну пиздец, ты читаешь вообще ответы, нет?

>btw, лок это нечто типа паттерна - объект, лочащий мьютекс и разлочивающий при разрушении.


Обертка над мьютексом это. Если ты передашь его в wait, то сначала соответствующий мьютекс разблочит wait, а потом его попытается разблочить сам лок при выходе их скоупа, и твоя параша весело наебнется.
sage #435 #461268
>>461267

>из


фикс
#436 #461448
>>460999
1) Таки я не понял,

>Разве твой костыль не наебнется на проверке существования файла который закрыт для записи?



Наебнётся мой костыль или нет? Не должен же: я проверяю, имеется ли возможность открыть файл на чтение. На мой взгляд, это равносильно проверке на его существование.

Можно ли туда писать или нет, меня не интересует. Меня интересует, существует файл или нет.

2) Хорошо, хочу спиздить исходники. Помоги дауну в этом. Вот имеется код.

>QFileInfo("/path/to/dir").isDir();


>QDir::mkpath("/path/to/dir");



Гуглим.
http://cep.xray.aps.anl.gov/software/qt4-x11-4.2.2-browser/d0/de9/qfileinfo_8cpp-source.html

isDir находится один раз
mkpath вообще ни разу

Что нужно вообще спизидить? Как спизженное будет выглядеть целиком? Помоги дауну.
sage #437 #461457
>>461448

>я проверяю, имеется ли возможность открыть файл на чтение. На мой взгляд, это равносильно проверке на его существование.


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

>Что нужно вообще спизидить? Как спизженное будет выглядеть целиком?


Неудивительно, что ты не нашел, там гора кода, много обращений к внутренним классам и тд. Так что походу не проктит. В гугле за первую минуту решения я тоже не нашел. Так что или кури доки по всем платформам и пиши велосипед, или пытайся гуглить с призрачной надеждой на успех, или кончай страдать хуйней и используй предназначенные для этого инструменты.
#438 #461459
>>461457

>Файл может существовать, но у тебя при этом может не быть прав на его чтение.


Согласен.

>или кончай страдать хуйней и используй предназначенные для этого инструменты


По ходу, это. А я так не хотел...
#439 #461463
>>461459

> А я так не хотел


>>456723

> Вопросы "Как мне сделать Х без библиотек" идут на хуй.

#440 #461464
>>461463
Мне всего-то что нужно, проверить существование файла и папки. Всё остальное у меня велосипед. Ради этого прикреплять мощную библиотеку...
#441 #461480
>>461464
Используй Boost.Filesystem и только его.
#442 #461481
>>461464
Вообще ты тут ломаешься раз в 1000 дольше, чем писал бы.
#443 #461486
>>461480
Вот я тоже склоняюсь к бусту.

>>461481
...one of the most highly regarded and expertly designed C++ library projects in the world.
— Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Нахера мне твоя Qt?
#444 #461491
>>461486
Когда ты писать съебёшь наконец?
#445 #461507
>>461491
Не могу нагуглить, как библиотеку в Visual Studio подключить. Самому копаться лень, вот и гуглю.
sage #446 #461531
Пиздец, клован, просто уебывай писать на пхп, кресты не для таких даунов.
#447 #461616
>>461531
Обожаю, когда твой пердак улетает на орбиту. Это бесценно. Ты вообще единственный, кого я тут узнаю. Я просто тред бампаю.
sage #448 #461623
>>461616
Не хочу разрушать твою иллюзию, но мне просто доставляет поносить даунов, смешивать их с говном.
#449 #461792
>>461623
Нет, тебя просто узнать по саже и кьютам, теперь ты саже-куто-кун.
sage #450 #461844
>>461792
С этим я и не спорю, но ответ в силе.
#451 #461851
Поймите и примите как факт, что наделаете ошибок. Задача в том, чтобы найти их рано, пока они не попали в продакшн. Слава богу, в нашей индустрии, за исключением ребят из Лаборатории реактивного движения НАСА, которые делают софт для управления ракетами, ошибки обычно несмертельны. Мы можем и должны учиться, смеяться и продолжать работу.

Ваш код — не вы. Помните, что вся суть проверки кода в том, чтобы найти ошибки, и они обязательно найдутся. Не воспринимайте как личное оскорбление, когда это случится.

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

Не переписывайте код без консультации. Есть тонкая грань между «поправить код» и «переписать код». Почувствуйте разницу и преследуйте изменения стиля в рамках штатной проверки кода, а не как одинокий рейнджер.

Относитесь к людям, которые знают меньше вас, с уважением, почтением и терпением. Люди, напрямую не связанные с IT, но которым часто приходится иметь дело с разработчиками, считают нас в лучшем случае зазнайками, а в худшем — нытиками. Не кормите стереотипы гневом и нетерпеливостью.

Единственное, что в мире постоянно — это перемены. Будьте готовы к переменам и принимайте их с улыбкой. Взгляните на изменения в требованиях, платформе или инструменте как на вызов, а не как на неудобство, которое надо побороть.

Единственный истинный авторитет дают знания, а не положение. Знание порождает авторитет, а авторитет порождает уважение. Хотите уважения в среде, где нет места эго — культивируйте знания.

Боритесь за то, во что верите, но непринужденно признавайте поражение. Поймите, что иногда ваши идеи будут отклонять. Даже если вы и правы, не надо мстить и говорить «А я предупреждал, что так будет». Никогда не превращайте отвергнутые идеи в мученический стон или боевой клич.

Не становитесь «тем кодером в углу». Не будьте человеком в темном кабинете, который выходит только за колой. Кодера в углу не видно, с ним сложно связаться, его сложно контролировать. У такого человека нет голоса в открытой, кооперативной среде. Включайтесь в беседы и будьте частью сообщества своего офиса.

Критикуйте код, а не людей. Будьте добры к людям, но не к коду. Насколько возможно, пишите позитивные комментарии, направленные на улучшение кода. Свяжите комментарии с принятым в команде стандартом кода, техзаданием, повышением производительности и т.д.
#451 #461851
Поймите и примите как факт, что наделаете ошибок. Задача в том, чтобы найти их рано, пока они не попали в продакшн. Слава богу, в нашей индустрии, за исключением ребят из Лаборатории реактивного движения НАСА, которые делают софт для управления ракетами, ошибки обычно несмертельны. Мы можем и должны учиться, смеяться и продолжать работу.

Ваш код — не вы. Помните, что вся суть проверки кода в том, чтобы найти ошибки, и они обязательно найдутся. Не воспринимайте как личное оскорбление, когда это случится.

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

Не переписывайте код без консультации. Есть тонкая грань между «поправить код» и «переписать код». Почувствуйте разницу и преследуйте изменения стиля в рамках штатной проверки кода, а не как одинокий рейнджер.

Относитесь к людям, которые знают меньше вас, с уважением, почтением и терпением. Люди, напрямую не связанные с IT, но которым часто приходится иметь дело с разработчиками, считают нас в лучшем случае зазнайками, а в худшем — нытиками. Не кормите стереотипы гневом и нетерпеливостью.

Единственное, что в мире постоянно — это перемены. Будьте готовы к переменам и принимайте их с улыбкой. Взгляните на изменения в требованиях, платформе или инструменте как на вызов, а не как на неудобство, которое надо побороть.

Единственный истинный авторитет дают знания, а не положение. Знание порождает авторитет, а авторитет порождает уважение. Хотите уважения в среде, где нет места эго — культивируйте знания.

Боритесь за то, во что верите, но непринужденно признавайте поражение. Поймите, что иногда ваши идеи будут отклонять. Даже если вы и правы, не надо мстить и говорить «А я предупреждал, что так будет». Никогда не превращайте отвергнутые идеи в мученический стон или боевой клич.

Не становитесь «тем кодером в углу». Не будьте человеком в темном кабинете, который выходит только за колой. Кодера в углу не видно, с ним сложно связаться, его сложно контролировать. У такого человека нет голоса в открытой, кооперативной среде. Включайтесь в беседы и будьте частью сообщества своего офиса.

Критикуйте код, а не людей. Будьте добры к людям, но не к коду. Насколько возможно, пишите позитивные комментарии, направленные на улучшение кода. Свяжите комментарии с принятым в команде стандартом кода, техзаданием, повышением производительности и т.д.
sage #452 #461857
Поймите и примите тот факт, что наделаете в разы меньше ошибок, чем те дауны-ньюфаги с анонимного форума. Задача в том, чтобы обоссать их рано, пока их не взяли на работу. Слава богу, в нашей индустрии, за исключением ребят из 10Б, которые делают софт для сжатия интернета до размеров одной флешки, ошибки стоят денег и проебанного времени пользователя. Мы можем и должны учиться, смеяться и продолжать обоссывать даунов.

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

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

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

Относитесь к людям, который знают больше вас, с уважением, почтением и терпением. Люди, напрямую не связанные с IT, но которым часто приходится иметь дело с разработчиками, являются тупыми гуманитариями и могут сосать хуй, их мнение никого не интересует. Кормите их говном и сажей.

Единственное, что в мире постоянно - это ежедневный прирост числа дегенератов. Будьте готовы к наплыву дегенератов и принимайте их с сажей. Взгляните на деградацию доски, вопросы по синтаксису и "как взломать вконтакте" как на вызов, а не как на неудобство, которое надо побороть.

Единственный истинный авторитет дает опыт написания программ, а не кукареканье о кластерах метапарадигм. Написание программ порождает уверенность в своих силах, а уверенность порождает спокойствие. Спокойствие в среде, где полно мамкиных тралей - залог здоровья вашей жопы.

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

Не становитесь "тем кодером в углу". Вы уже давно им стали. Не будьте человеком в темном кабинете, который выходит только за колой (ведь можно заказать колу прямо в кабинет). Кодера в углу не видно, с ним сложно связываться, его сложно контролировать. А нам только этого и надо. У такого человека нет голоса в открытой петушиной среде, но все равно чуть что все бегут к нему. Игнорируйте социоблядей и ссыте на них.

Критикуйте и код, и людей. Будьте добры к людям, но не к дегенератам. Насколько возможно, пишите комментарии, отправляющие дауненка в гугл. Свяжите комментарии с принятым на доске стандартом унижать долбоебов, ебать их мамаш, сестер и т.д.
sage #452 #461857
Поймите и примите тот факт, что наделаете в разы меньше ошибок, чем те дауны-ньюфаги с анонимного форума. Задача в том, чтобы обоссать их рано, пока их не взяли на работу. Слава богу, в нашей индустрии, за исключением ребят из 10Б, которые делают софт для сжатия интернета до размеров одной флешки, ошибки стоят денег и проебанного времени пользователя. Мы можем и должны учиться, смеяться и продолжать обоссывать даунов.

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

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

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

Относитесь к людям, который знают больше вас, с уважением, почтением и терпением. Люди, напрямую не связанные с IT, но которым часто приходится иметь дело с разработчиками, являются тупыми гуманитариями и могут сосать хуй, их мнение никого не интересует. Кормите их говном и сажей.

Единственное, что в мире постоянно - это ежедневный прирост числа дегенератов. Будьте готовы к наплыву дегенератов и принимайте их с сажей. Взгляните на деградацию доски, вопросы по синтаксису и "как взломать вконтакте" как на вызов, а не как на неудобство, которое надо побороть.

Единственный истинный авторитет дает опыт написания программ, а не кукареканье о кластерах метапарадигм. Написание программ порождает уверенность в своих силах, а уверенность порождает спокойствие. Спокойствие в среде, где полно мамкиных тралей - залог здоровья вашей жопы.

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

Не становитесь "тем кодером в углу". Вы уже давно им стали. Не будьте человеком в темном кабинете, который выходит только за колой (ведь можно заказать колу прямо в кабинет). Кодера в углу не видно, с ним сложно связываться, его сложно контролировать. А нам только этого и надо. У такого человека нет голоса в открытой петушиной среде, но все равно чуть что все бегут к нему. Игнорируйте социоблядей и ссыте на них.

Критикуйте и код, и людей. Будьте добры к людям, но не к дегенератам. Насколько возможно, пишите комментарии, отправляющие дауненка в гугл. Свяжите комментарии с принятым на доске стандартом унижать долбоебов, ебать их мамаш, сестер и т.д.
#453 #461878
Анон с хуевой реализацией Producer–consumer вкатился снова. Я чуток приболел и поэтому вчера ничего не писал. В целом я ту программу закончил - она работает. Однако там поле не паханное - надо с памятью разобраться, реализацию паттерна заебашить хорошую, закомментировать все, добавить GUI и много ещё чего.

Однако разработка этой программы надоела. Стоит ли доводить проект до конца (новых знаний там прибавится более чем дохуя), либо браться за что-нибудь другое?
sage #454 #461884
>>461878
Тут два стула. Либо ты бросаешь это говно и начинаешь что-то более полезное, либо доводишь до конца, несмотря на то что это бесполезный калич. В первом случае ты не тратишь время на ковыряние в говне, но привыкаешь забрасывать проекты, во втором - учишься доводить работу до конца, но занимаешься неинтересным и нинужным делом, что тоже хуево. Если же программа нужная и интересная, просто тебе лень - то тут без вариантов: только доводить до конца, иначе так и будешь факториалы всю жизнь писать.
#455 #461893
>>461884
Ну программа нахуй никому не всралась даже мне, однако как я уже выше много технических деталей смогу из неё вытащить. Я сейчас поаутизировал и пришел к выводу, что нужно продолжать пилить её и использовать в качестве полигона для тестов всяких новых фич.

Олсо, поясните за чистку памяти. inb4: используй smart_ptr; Я как-то не особо понимаю, когда надо вычищать память, а когда нет. Есть какой-нибудь гайд?
sage #456 #461910
>>461893
Ну я обычно стараюсь доделать хотя бы какой-то запланированный минимум, сильно задрачивать говно не стоит.

Память надо освобождать, когда она выделена в куче (heap), то есть при помощи new (malloc на рассматриваю, ибо байтоебское ненужное говно). Когда ты больше не используешь выделенную память (скажем, класс, который выполнял какую-то операцию, отработал), то надо ее освободить, то бишь вызвать delete. Умные указатели сильно упрощают задачу, но в сложных проектах там тоже могут возникать всякие нюансы, типа перекрестный ссылок (тут используют костыль под названием weak pointer). А вот что пишут на СО http://stackoverflow.com/questions/76796/memory-management-in-c Но по мне, так эта ебля с RAII - еще большие костыли, выразительность падает ниже уровня жабы (хотя казалось бы, как такое возможно).
#457 #461912
>>461844
Он не я, если что.

>>461910

>Qt >бустофоб >байтофоб


Скоро мы будем знать про тебя всё.
sage #458 #461916
>>461912
При чем тут -фоб или не -фоб? Зачем использовать буст с его уродливыми названиями и мешаниной нэймспейсов, если есть красивый и приятный Qt? Зачем ебаться с байтами, когда на дворе 2015 год, и даже самый обоссанный китайский телефон на порядок мощнее моего первого компьютера, тянувшего 3д игры на максималках в свое время? Это все просто нинужно в большинстве случаев. Но остается еще "меньшинство случаев", я прекрасно понимаю, что там это все может потребоваться. Но никак не в лаба_2.
#459 #462135
>>461910

>malloc на рассматриваю


Ну и дурак. Placement new - одна из самых крутых фич плюсов.
sage #460 #462144
>>462135
Ну и где это применяется на практике? В паре особо требовательных к производительности библиотек да в ядрах каких-нибудь, и все.
#461 #462156
>>462144

>Ну и где это применяется на практике?


В самописных контейнерах.
#462 #462159
>>462144

> кудкудах кампюктиры мощьные можна говнокодить


Добавьте это тоже в ОП пост с пометкой "нахуй".
sage #463 #462162
>>462159

>говнокодить


>не ебаться с байтами == говнокодить


У меня для тебя плохие новости.
sage #464 #462163
>>462156
В велосипедах на лабах, короче. Ясно.
#465 #462170
>>462163
И это говорит человек, работающий в универе за еду.
sage #466 #462173
>>462170
Поправочка: ничего не делающий и получающий за это какие-никакие, а копейки. Хотя скоро диплом, и отмазки больше не прокатят, но может что еще придумаю.
#467 #462174
>>462173
Начнешь нормально работать, поймешь, что самописные контейнеры - не такая уж и редкость.
#468 #462177
Вопросы за оптимизацию. Олсо, дедлай прошел, поэтому могу уже спокойно обмазываться и дописывать, как душе угодно.
>>461910 – заставил задуматься. Почитал всякие доки и понял, что дико обосрался в одном месте.
>>461916 – Я сейчас пишу в академических целях. У меня дико печет от того, что я не понимаю, как некоторые вещи работают, поэтому стараюсь писать настолько низко, насколько это понимаю. Но в тоже время чтобы это было интересно.
Задача: На вход подается матрица, матрица, и число. На выходе должен быть сгенерирован файл в формате pdf с матрица, матрица, список, число.

Вопросов, конечно, ещё дохуя, но я самые такие базовые спрошу, которые не дают мне покоя. В частности прошу уделить дохуя внимания памяти, ибо я не все понимаю и чую, что где-то насрано. Также не надо писать "пиши на Qt", "smart_ptr" и тому подобное. Пока я хочу поебаться на некотором low-level, чтобы понять что к чему. Потом перепишу, а может быть и заброшу. Хуй знает.

Олсо, почему C такой популярный, а C++ не очень? Останусь ли я без работы, если буду ебаться только с плюсовыми фичами?

1.\tМоя программа течет, блядь. Она сжирает около 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.\tЗадачи приходят из JSON парсера, который создает объект и тупо его перебирает, извлекая нужные значения в цикле. Отсюда и главный вопрос – как засунуть объект в очередь?
Сейчас у меня это довольно ебануто реализовано.
[code lang="cpp"]
for (size_t i = 0; i < tasks.size(); ++i)
{
\tTaskMeta TaskMetaObj;
\t
\tjson& task = tasks;
\tTaskMetaObj.matrixA = task["matrixA"].as<std::vector<double> >();
\tTaskMetaObj.matrixB = task["matrixB"].as<std::vector<double>>();
\tTaskMetaObj.precision = task["precision"].as<unsigned int>();
\t
\ttaskQueue.push(TaskMetaObj);
\t
}
[/code]

В частности я не понимаю поведение в строчке TaskMeta TaskMetaObj. Ведь таким образом менеджмент памяти будет автоматически производиться, и как только очередь вытащит этот элемент и выполнит удаление, то этот объект будет разрушен?
[code lang="cpp"]
T rc(std::move(this->newQueue.back()));
this->newQueue.pop_back();
return rc;
[/code]
Или нужно создавать этот объект через new и самому вычищать его? Суть в том, что по факту надо протащить этот объект через всю программу, модифицировав его только в одном поле.
Программа использует только два первых вектора и число для вычислений, а в список уже заносит полученные данные, которые печатаются. В результате программа тащит через себя вот это все говно. Я не уверен, что это эффективно.

Ещё есть задумка, чтобы писать в очередь сразу по нескольку объектов. То есть парсер вытаскивает данные из файла, считаем, например, до 10 объектов и кидаем их в очередь, а потом пробуем ещё раз. Если в момент чтения к очереди обращались, то мы опять забиваем на неё и читаем что-нибудь ещё, и пробуем обратиться ещё раз.

3.\tКак организовать класс с вычислениями? Сейчас у меня есть класс, который принимает ссылочку на структуру 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.\tЗапись в файл. У меня сейчас крайне тупой алгоритм:
a)\tСоздать новый файл.
b)\tЗаписать в него заголовок LaTeX файла.
c)\tВ цикле брать из очереди все обсчитанные задачи.
d)\tДописывать их крайне топорно в файл
e)\tЕсли очередь закончилась, то завершить файл и передать файл на компиляцию.
А я хочу запилить класс, который будет годной оберткой для LaTeX.
file.usepackage->table //сгенерирует \usepackage{table}\n
file.add(“bmatrix”)->vector(std::vector<double>); //\begin{bmatrix} 1&2&3\end{bmatirx}
Это будет куда лучше? В частности документ будет на порядок чище, однако теперь про работу с этим файлом. Я пишу в него заголовок и начинаю дергать объекты из очереди на запись. Документ должен быть сформирован уже сразу “заголовок”+”тело”+”конец”, или можно просто запилить заголовок, дописывать в тело, а потом уже дописать конец файла.
И ещё. Предположим, что задача у нас очень большая, обсчет занял много времени, а очередь с ответами пустует. Стоит ли закрывать в таком случае файл?
1.\tОткрыл файл ->Дописал решение->закрыл файл-> … -> дописал конец файл
2.\tОткрыл файл->Дописал решение->дописал решение->дописал решение->..->дописал конец файла->закрыл файл.
#468 #462177
Вопросы за оптимизацию. Олсо, дедлай прошел, поэтому могу уже спокойно обмазываться и дописывать, как душе угодно.
>>461910 – заставил задуматься. Почитал всякие доки и понял, что дико обосрался в одном месте.
>>461916 – Я сейчас пишу в академических целях. У меня дико печет от того, что я не понимаю, как некоторые вещи работают, поэтому стараюсь писать настолько низко, насколько это понимаю. Но в тоже время чтобы это было интересно.
Задача: На вход подается матрица, матрица, и число. На выходе должен быть сгенерирован файл в формате pdf с матрица, матрица, список, число.

Вопросов, конечно, ещё дохуя, но я самые такие базовые спрошу, которые не дают мне покоя. В частности прошу уделить дохуя внимания памяти, ибо я не все понимаю и чую, что где-то насрано. Также не надо писать "пиши на Qt", "smart_ptr" и тому подобное. Пока я хочу поебаться на некотором low-level, чтобы понять что к чему. Потом перепишу, а может быть и заброшу. Хуй знает.

Олсо, почему C такой популярный, а C++ не очень? Останусь ли я без работы, если буду ебаться только с плюсовыми фичами?

1.\tМоя программа течет, блядь. Она сжирает около 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.\tЗадачи приходят из JSON парсера, который создает объект и тупо его перебирает, извлекая нужные значения в цикле. Отсюда и главный вопрос – как засунуть объект в очередь?
Сейчас у меня это довольно ебануто реализовано.
[code lang="cpp"]
for (size_t i = 0; i < tasks.size(); ++i)
{
\tTaskMeta TaskMetaObj;
\t
\tjson& task = tasks;
\tTaskMetaObj.matrixA = task["matrixA"].as<std::vector<double> >();
\tTaskMetaObj.matrixB = task["matrixB"].as<std::vector<double>>();
\tTaskMetaObj.precision = task["precision"].as<unsigned int>();
\t
\ttaskQueue.push(TaskMetaObj);
\t
}
[/code]

В частности я не понимаю поведение в строчке TaskMeta TaskMetaObj. Ведь таким образом менеджмент памяти будет автоматически производиться, и как только очередь вытащит этот элемент и выполнит удаление, то этот объект будет разрушен?
[code lang="cpp"]
T rc(std::move(this->newQueue.back()));
this->newQueue.pop_back();
return rc;
[/code]
Или нужно создавать этот объект через new и самому вычищать его? Суть в том, что по факту надо протащить этот объект через всю программу, модифицировав его только в одном поле.
Программа использует только два первых вектора и число для вычислений, а в список уже заносит полученные данные, которые печатаются. В результате программа тащит через себя вот это все говно. Я не уверен, что это эффективно.

Ещё есть задумка, чтобы писать в очередь сразу по нескольку объектов. То есть парсер вытаскивает данные из файла, считаем, например, до 10 объектов и кидаем их в очередь, а потом пробуем ещё раз. Если в момент чтения к очереди обращались, то мы опять забиваем на неё и читаем что-нибудь ещё, и пробуем обратиться ещё раз.

3.\tКак организовать класс с вычислениями? Сейчас у меня есть класс, который принимает ссылочку на структуру 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.\tЗапись в файл. У меня сейчас крайне тупой алгоритм:
a)\tСоздать новый файл.
b)\tЗаписать в него заголовок LaTeX файла.
c)\tВ цикле брать из очереди все обсчитанные задачи.
d)\tДописывать их крайне топорно в файл
e)\tЕсли очередь закончилась, то завершить файл и передать файл на компиляцию.
А я хочу запилить класс, который будет годной оберткой для LaTeX.
file.usepackage->table //сгенерирует \usepackage{table}\n
file.add(“bmatrix”)->vector(std::vector<double>); //\begin{bmatrix} 1&2&3\end{bmatirx}
Это будет куда лучше? В частности документ будет на порядок чище, однако теперь про работу с этим файлом. Я пишу в него заголовок и начинаю дергать объекты из очереди на запись. Документ должен быть сформирован уже сразу “заголовок”+”тело”+”конец”, или можно просто запилить заголовок, дописывать в тело, а потом уже дописать конец файла.
И ещё. Предположим, что задача у нас очень большая, обсчет занял много времени, а очередь с ответами пустует. Стоит ли закрывать в таком случае файл?
1.\tОткрыл файл ->Дописал решение->закрыл файл-> … -> дописал конец файл
2.\tОткрыл файл->Дописал решение->дописал решение->дописал решение->..->дописал конец файла->закрыл файл.
sage #469 #462180
>>462174
Все может быть, я ж сужу на основании того, что знаю сейчас. Хотя вряд ли мне понравится работать байтоебом (не как что-то плохое, чисто субъективно).
#470 #462188
>>462180

>Хотя вряд ли мне понравится работать байтоебом


Кодинг на С++ - это почти всегда байтоебство. Иди в джаву или сишарп.
sage #471 #462190
>>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 байт остался.
Алсо, что касается скорости, везде, где идет большое количество добавлений элементов в вектор, замени его на лист. А лучше вообще навсегда забудь про вектор, почти всегда лист будет быстрее (вектор быстрее только когда ты заранее знаешь количество элементов и создаешь вектор нужного размера).
И еще, выражай мысли лаконичнее, это пиздец все это читать.
sage #472 #462193
>>462188
Нихуя. С кьютом никакого байтоебства почти, ну кроме памяти. Хотя память это скорее такой челлендж, лол, а с умными указателями даже и челленджа нет.
Жабу успел поюзать, когда еще нормально начинал работать, больше не хочу. Язык хороший, но фреймворки с этой аннотационно-XMLной дрисней заставляют блевать перманентно. Шарп - нет, ибо привязка к сперме. Корявые поделки для пинуса, в которых на каждом миллиметре подводные камни нинужны, а официально еще когда портируют, когда отладят. Ну нахуй. Немало языков я попробовал, но только кресты понравились.
sage #473 #462443
В QImageWriter есть метод setCompression(int compression), но я никак не могу найти где описаны комбинации format/compression type для этой функции. Там приведен всего один пример с tiff. Кто-нибудь знает где это можно найти?
#474 #462444
>>462443
Сажа прилипла.
#475 #462454
>>462443
лол, странно, что они этого не описали.
ну список поддерживаемых форматов можно получить через supportedImageFormats(), а вот типы компрессоров хз, попробуй посмотри в исходниках, функция write вызывает
if (d->handler->supportsOption(QImageIOHandler::CompressionRatio))
d->handler->setOption(QImageIOHandler::CompressionRatio, d->compression);

так что лезь в qimageiohandler.cpp
sage #476 #462471
>>462443
Поидее, раз ты используешь определенный формат, то должен знать, какие уровни сжатия он поддерживает. Qt тут ни при чем. Хотя, конечно, если бы они это написали, были бы еще охуеннее.
#477 #462493
>>462471
Не, ну там же высокоуровневая обертка над ним (соответствующий плагин) и этот setCompression принимает в себя какой-то индекс. Как я, даже зная все поддерживаемые методы сжатия, могу определить какой индекс чему соответствует? В общем, хваленая документация Qt дала тут слабину.
sage #478 #462526
>>462493
Ты тупой? Допустим, формат жпег поддерживает 100 разных степеней сжатия, по количеству процентов. А формат йоба поддерживает три варианта сжатия: 0, 1, 2 (без сжатия, среднее сжатие, охуенное сжатие). Это от кьюта никак не зависит, а зависит только от самого формата.
#479 #462528
>>462526
Нет, это ты, видимо тупой. Qt реализует плагины для записи/чтения этих файлов, конвертируя степени сжатия в свои какие-то индексы. Где документация по этим стандартным плагинам? Да нету ее нихуя!
sage #480 #462529
>>462526
Поясню еще: не зависит потому, что кьют, внезапно, использует 3rd party библиотеки для работы с форматами изображений. Для каждого формата имеется спецификация, в которой указано, какие могут быть варианты сжатия. Библиотеки, разумеется, следуют этим спецификациям. Кьют - всего лишь обертка в данном случае. Если сказано в спеках, что фаормат такой-то поддерживает столько-то степеней сжатия, то число в этих пределах и указывай.
sage #481 #462530
sage #482 #462531
Для пнг и жпг, если правильно помню, сжатие идет от 0 до 100.
#483 #462533
>>462529
Да я тебя, блять и спрашиваю, КАК он конвертирует эти форматы сжатия в свои индексы? КАК он это обертывает? КАКОЙ мне нужно поставить индек чтобы для PNG получить RLE сжатие? В спеке PNG не написано как там какой-то Qt его использует. В 3rd party библиотеках не знают под каким номером Qt поставит то или иное сжатие.Че ты мне загоняешь прописные истины? Где мне найти таблицу соответствия (file format:encoding alg)/Qt index?
#484 #462534
Собираюсь переписывать свою недоочередь. Какие предложения есть, чтобы было познавательно, но в тоже время не 0 уровень байтоебства и пригодилось бы на работе\собеседовании?
sage #486 #462540
>>462534

>байтоебства


>пригодилось бы на работе


Выбери одно. А если сурьезно, то загугли очередь, только чтоб там описание алгоритма было, без кода. Почитай, вникни, реализуй.
#487 #462542
>>462540
А именно очередь или паттерн проектирование Producer–consumer?
sage #488 #462543
>>462542
Ты меня спрашиваешь? Хочешь очередь - делай очередь. Хочешь производитель-потребитель - делай его. Но в последнем случае довольно сложно реализовать какой-то общий, универсальный контейнер или алгоритм, обычно такие вещи реализует каждый под свои нужды.
#489 #462544
>>462537
Так все же, почему это нигде не отражено в документации Qt?
Все-таки они основаны на этих библиотеках и было бы правильно описать на чем основывается параметр для каждого конкретного СТАНДАРТНОГО случая.
17 Кб, 577x152
sage #490 #462546
>>462537
Впрочем, можешь не пытаться, пикрелейтед. Хинт: такой опции в кьютовом пнг вообще нет. Ну, я тоже могу обосраться, не без этого.
sage #491 #462547
>>462544
Видимо, не успели, забыли, посчитали что нинужно. С таким то объемом документации не удивительно.
#492 #462558
Вот как так получается? Всякие люксофты платят хотя бы 20к стажеру, а вот йоба Московский банк платить ничего не хочет.
Вопрос номер два? Какого хуя такие вакансии вообще существуют?
http://career.ru/vacancy/13214717?query=C%2B%2B
#493 #462559
http://career.ru/vacancy/13097189?query=C%2B%2B

>Приглашаются студенты 4-5 курсов, выпускники, начинающие специалисты ТЕХНИЧЕСКИХ ВУЗОВ для прохождения стажировки с возможностью дальнейшего трудоустройства


> ТЕХНИЧЕСКИХ ВУЗОВ


Пок-пок, образование не важно
#494 #462564
Что-то полистал вакансии - припекло. Не найду я работу, походу.
#495 #462569
>>462559
Перевожу с копроративного на человеческий

> студенты / начинающие специалисты


готов работать за копеечку

> 4-5 курсов, выпускники


но въебывать будь добр на полную катушку

> ТЕХНИЧЕСКИХ ВУЗОВ


О Госпади да всем насрать. Главное чтобы количество твоих знаний бесполезной поебени из IT области пересеченное со знаниями бесполезной поебени того кто будет проводить допрос превышало некий критический порог.
#496 #462575
Мне тут скинул список того, что я должен знать, чтобы задуматься о том, чтобы пойти на собеседование. Список нормальный? Что ещё можно добавить?

это знание студии, знание стандарта 2003, знание 50% стандарта 11, знание стл, основные контейнеры, сложность операций, зачем каджый контейнер, знание исключений, знание неопределнного поведения, знание плюсового ооп, хотя бы до уровня виртуального наследования, понимать зачем нужны виртуальные деструкторы и вкак вообще работает рантаймовый даункаст (виртуальные методы)

понимание многопоточки, и основных примитивов синхронизации. атомики, мьютексы, критические секции, и их гуарды
в связи с гуардом понимать что такое раии

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

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

вот в таком духе
а по техническим соотв быть готовым к виртуальным деструкторам, почему нельзя использовать ауто_птр, и сотни других
#497 #462584
>>462575
нормальный. если все из списка будешь знать на джуниорскую с++ изи попадешь.
#498 #462586
>>462558
лол, припекло чет. какого хуя они о себе думают вообще.
#499 #462587
>>462584
Ну так-то дохуя. Но я уже знакомые слова тут вижу и примерно понимаю для чего тут и что надо.
#500 #462592
>>462587
ну да, дохуя, но на самом деле 90% этого есть в любой хорошей книге по с++.
а так, если будешь все это понимать уверенней же в себе сам будешь.
и еще я бы к списку добавил Qt, boost, Win Api хотя бы на уровне "подключал, запускал пару функций".
Это из требований к чистым плюсовикам.
#501 #462593
>>462592
Ну вот из Boost юзал тут недавно. Да и QT. Да и на WinApiшных сокетах чатик писал.
#502 #462615
>>462546
Да в общем-то там нигде, кроме TIFF, сжатие и не поддерживается. Ну что за говно.
sage #503 #462618
>>462615
Qt все-таки не про работу с изображениями. Поддерживает базовые возможности и норм. Читает то нормально, и ладно.
#504 #462625
Почему sort() не сортирует вектор? http://pastebin.com/PJZHQwKN
#505 #462632
>>462625
Проверь как работает operator< с твоими строками, вообще он должен лексографически сравнивать и все должно быть ок, но больше что-то нихуя не приходит в голову. Попробуй версию sort с тремя параметрами.
2 Кб, 229x155
#506 #462636
>>462632
Пиздец, ебаный c++, нихуя не пойму, что ему надо-то?
#507 #462637
>>462636
На стаковерфлов разжевали, оказывается при создании вектора через stream-ы всё распидорашивало. http://pastebin.com/MPMRk4vV заменил на это. В C++ всё через жопу, блядь.
948 Кб, 1920x962
#508 #462642
>>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]
Без копирования, естественно.
#509 #462646
Перекот-то кто-нибудь пилить будут?
#510 #462713
>>462646
Пускай официальный -sage-Qt-ОП-хуй пилит.
sage #511 #462715
>>462637
Просто ты не используешь нормальные библиотеки типа Qt или хотя бы boost, где вся эта еблся с байтами красиво обернута и работает как надо.
sage #512 #462716
>>462642
Сломал мозг, читая это математическое говно. Давай на примере с числами.
sage #513 #462719
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Новый итт-трендель: https://2ch.hk/pr/res/462718.html
Тред утонул или удален.
Это копия, сохраненная 12 мая 2015 года.

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

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