М.Двач / Программирование

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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

C++ #60 13 окт, 12:27 #1074841 В конец треда | Веб

110 Кб, 750x422

114 Кб, 415x415

Вместо шапки - https://github.com/sosachbot/cppthreadhat/wiki
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Прошлый - https://2ch.hk/pr/res/1063107.html (М)

Ответы7486475352755447587376061

13 окт, 12:46 #2 #1074846

Вкатился!

757 Кб, 2160x2160

13 окт, 13:03 #3 #1074849

Вкатился, освятил тред рабочей станцией HP.

Ответы748537506277624

13 окт, 13:22 #4 #1074853

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

Ответы7505275062

13 окт, 13:48 #5 #1074864

>>1074841 (OP)
С++ раздутое говно для ООП макак.
Настоящие хакеры пишут на С.

Ответы74882

13 окт, 14:03 #6 #1074882

>>1074864
Проорал с хакира.
Ассемблеро боярин.

Ответы74887

13 окт, 14:14 #7 #1074887

>>1074882
Неженка!
Пишу в байткодах с помощью cat

Ответы74894

13 окт, 14:26 #8 #1074894

>>1074887
пишу сразу байткодом.
0010101011101010001010101110101000101010111010100010101011101010001010101110101000101010111010100010101011101010001010101110101000101010111010100010101011101010001010101110101000101010111010100010101011101010001010101110101000101010111010100010101011101010 пидоры.

Ответы7489874899

13 окт, 14:30 #9 #1074898

>>1074894
01010010 01100101 01100010 01101010 01100001 01110100 01100001 00101100 00100000 01101110 01100101 00100000 01110011 01110100 01101111 01101001 01110100 00100000 01110110 01110011 01101011 01110010 01111001 01110110 01100001 01110100 00100111 00100000 01101010 01100101 01110100 01110101 00100000 01110100 01100101 01101101 01110101 00101110 00100000 01010110 01111001 00100000 01101101 01101111 01101100 01101111 01100100 01111001 01100101 00101100 00100000 01110011 01101000 01110101 01110100 01101100 01101001 01110110 01111001 01100101 00101100 00100000 01110110 01100001 01101101 00100000 01110110 01110011 01100101 00100000 01101100 01100101 01100111 01101011 01101111 00101110 00100000 01001010 01100101 01110100 01101111 00100000 01101110 01100101 00100000 01110100 01101111 00101110 00100000 01001010 01100101 01110100 01101111 00100000 01101110 01100101 00100000 01000011 01101000 01101001 01101011 01100001 01110100 01101001 01101100 01101111 00100000 01101001 00100000 01100100 01100001 01111010 01101000 01100101 00100000 01101110 01100101 00100000 01100001 01110010 01101000 01101001 01110110 01111001 00100000 01110011 01110000 01100101 01100011 01110011 01101100 01110101 01111010 01101000 01100010 00101110 00100000 01010011 01101010 01110101 01100100 01100001 00100000 01101100 01110101 01100011 01101000 01110011 01101000 01100101 00100000 01101110 01100101 00100000 01101100 01100101 01111010 01110100 00100111 00101110 00100000 01010011 01100101 01110010 00100111 01100101 01111010 01101110 01101111 00101100 00100000 01101100 01101010 01110101 01100010 01101111 01101010 00100000 01101001 01111010 00100000 01110110 01100001 01110011 00100000 01100010 01110101 01100100 01100101 01110100 00100000 01111010 01101000 01100001 01101100 01100101 01110100 00100111 00101110 00100000 01001100 01110101 01100011 01101000 01110011 01101000 01100101 00100000 01111010 01100001 01101011 01110010 01101111 01101010 01110100 01100101 00100000 01110100 01100101 01101101 01110101 00100000 01101001 00100000 01111010 01100001 01100010 01110101 01100100 00100111 01110100 01100101 00101100 00100000 01100011 01101000 01110100 01101111 00100000 01110100 01110101 01110100 00100000 01110000 01101001 01110011 01100001 01101100 01101111 01110011 00100111 00101110 00100000 01001010 01100001 00100000 01110110 01110000 01101111 01101100 01101110 01100101 00100000 01110000 01101111 01101110 01101001 01101101 01100001 01101010 01110101 00101100 00100000 01100011 01101000 01110100 01101111 00100000 01100100 01100001 01101110 01101110 01111001 01101101 00100000 01110011 01101111 01101111 01100010 01110011 01101000 01101000 01100101 01101110 01101001 01100101 01101101 00100000 01110110 01111001 01111010 01101111 01110110 01110101 00100000 01100100 01101111 01110000 01101111 01101100 01101110 01101001 01110100 01100101 01101100 00100111 01101110 01111001 01101010 00100000 01101001 01101110 01110100 01100101 01110010 01100101 01110011 00101100 00100000 01101110 01101111 00100000 01101000 01101111 01100011 01101000 01110101 00100000 01110011 01110010 01100001 01111010 01110101 00100000 01110000 01110010 01100101 01100100 01101111 01110011 01110100 01100101 01110010 01100101 01100011 01101000 00100111 00100000 01110000 01111001 01110100 01101100 01101001 01110110 01111001 01101000 00100000 00101101 00100000 01110011 01110100 01101111 01110000 00101110 00100000 01001111 01110011 01110100 01100001 01101100 00100111 01101110 01111001 01100101 00100000 01110000 01110010 01101111 01110011 01110100 01101111 00100000 01101110 01100101 00100000 01101110 01100001 01101010 01100100 01110101 01110100 00101110 00100000

13 окт, 14:30 #9 #1074898

>>1074894

Показать весь текст
Ответы7489974909

13 окт, 14:35 #10 #1074899

>>1074894
>>1074898
Больше похоже на ASCII. Кого ты тут наебать пытаешься?

13 окт, 14:47 #11 #1074909

>>1074898
Но она мертва.

Ответы74915

13 окт, 14:52 #12 #1074915

>>1074909
01001001 00100000 01101011 01101110 01101111 01110111 00111010 00110011

Ответы74930

13 окт, 15:07 #13 #1074930

>>1074915
>:3
Смайлоёб.

13 окт, 16:40 #14 #1075011

Сап, анон. Я вот чего не понимаю. В C++ нет никаких инструментов для работы с массивами? Какого, блядь, хуя? Как он вообще живет? Не удалить, не вставить, ну охуеть.

Ответы7501875024750847510375329

13 окт, 16:50 #15 #1075018

>>1075011
Блядь, создай. Но вообще только плюс. Вон в JS ввели, так эти дауны вообще всё через массив ебашут. Даже фронт, даже бэй, даже БД, Даже сокеты, даже небо блядь!

Ответы75019

13 окт, 16:52 #16 #1075019

>>1075018
Как что-то плохое, блядь. Зачем ездить на велосипеде, если есть автомобиль?

Ответы7502375044

13 окт, 17:01 #17 #1075023

>>1075019
Зачем ездить на велосипеде, если есть массив ты хотел сказать?
Алсо в крестах как я понял вектор то и есть тот же самый массив судя по всему.

13 окт, 17:09 #18 #1075024

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

13 окт, 17:38 #19 #1075044

>>1075019
>Как что-то плохое, блядь. Зачем ездить на велосипеде, если есть автомобиль?
Ага, а потом возникают такие ФРАКТАЛЫ
http://php.net/manual/en/array.sorting.php
В плюсах нормально зделано, есть набор разных структур данных с понятными предназначениями и алгоритмами.

Ответы75287

13 окт, 17:57 #20 #1075052

>>1074853
когда на глазу фофан и муж-алкаш заставляет позировать, деваться больше некуда

теперь это алкашей тред

13 окт, 18:07 #21 #1075062

>>1074853
Вот доебался, там одна мозоль и один синячок. А фотка хорошая вышла. Лучше посмотри на эту прекрасную рабочую станцию.
>>1074849

Ответы77554

13 окт, 18:47 #22 #1075084

>>1075011
std::vector

1 Мб, 1034x1397

13 окт, 19:33 #23 #1075099

Играли сегодня в пикрелейтед. Суть в том, что нужно соврешить еще 5 действий, чтобы в итоге получился ноль. Снизу уже есть две подсказки. Нужно начать с единицы и плюса. Или с пятерки. Выбираю вариант с единицей. Это значит, что пятерку трогать нельзя. Так что следующие возможные варианты : +7 или +2. Дальше либо -7, -3, +3, +3, +3, +2, +4, либо -2, -3, +3, +3, +3, +2, +4, x3, x2. Каждый вариант порождает еще больше вариантов. Сначала подумал, что легко такое реализовать, чтобы программка нашла все пути, по которым приходим к нулю (их несколько). Но теперь задумался и даже примерно не представляю, как это сделать. Есть идеи?

Ответы7514075147751647519075308753107531175835

13 окт, 19:36 #24 #1075103

>>1075011
Не понял что ты имеешь ввиду?
Статические массивы? int a[32];
Динамические массивы? std::vector, std::list

Ты о чем вообще?

13 окт, 21:29 #25 #1075140

>>1075099
>Так что следующие возможные варианты : +7 или +2.
Можно только со второй строки брать? А потом только с третьей?

Ответы75141

420 Кб, 1034x1397

13 окт, 21:34 #26 #1075141

>>1075140
Нет, двигаться можно по вертикали, горизонтали и диагонали ЧИСЛО-ЗНАК-ЧИСЛО. Пример на пикреле.

Ответы751437514475308

423 Кб, 1034x1397

13 окт, 21:38 #27 #1075143

>>1075141
Один из способов прийти к нулю

13 окт, 21:40 #28 #1075144

>>1075141
И наверх/назад нельзя?

Ответы75145

13 окт, 21:41 #29 #1075145

>>1075144
Можно. Но те знаки и числа, которые использовал, использовать повторно нельзя.

Ответы7517575308

13 окт, 21:42 #30 #1075147

>>1075099
На таких размерах можно сделать перебором, но пахнет ПОЛНОТОЙ

Ответы75149

13 окт, 21:45 #31 #1075149

>>1075147
>ПОЛНОТОЙ
ну хоть где-то матан пригодится

13 окт, 22:07 #32 #1075164

>>1075099
Числа только однозначные?

13 окт, 22:20 #33 #1075175

>>1075145
Самопересекаться?

13 окт, 22:32 #34 #1075190

>>1075099
Строишь дерево и обходишь его в глубину.

14 окт, 02:59 #35 #1075287

>>1075044
Ну не, там всё-таки в всоё время была фича в работе с бд и всё это было полезно.

14 окт, 05:27 #36 #1075307

2ch, подскажи, неявное преобразование производного класса в базовый происходит альтернативно тому что делает dynamic_cast? Пример:

A a = new B; // Неявное преобразование
A a = dynamic_cast<A*>(new B); // Явное преобразование

Ответы75329

14 окт, 06:19 #37 #1075308

>>1075099
> Выбираю вариант с единицей. Это значит, что пятерку трогать нельзя.
Хули нельзя, ты сказал
>>1075141
>двигаться можно по вертикали, горизонтали и диагонали
И
>>1075145
> те знаки и числа, которые использовал, использовать повторно нельзя

Если я начал с единицы, я не использовал 5!

14 окт, 06:26 #38 #1075310

>>1075099
На тебе решения, начинающиейся с "1+" http://termbin.com/4szs
Проверяй на соответствие правилам, которые ты всё никак не можешь нормально описать

14 окт, 06:37 #39 #1075311

>>1075099
http://termbin.com/tcknu

14 окт, 09:31 #40 #1075329

>>1075011
> В C++ нет никаких инструментов для работы с массивами? Какого, блядь, хуя?
array
vector
list
deque
ассоциативный map
range for
куча всяких прикладных функций типа apply, sort
Что ещё хочешь?
>>1075307
Правильность первой строки проверит компилятор - если A - предок Б, то программа скомпилируется.
Во второй строке правильность проверит собранная программа во время исполнения (динамик каст вернёт нуллптр, если А - не предок Б).
Когда тебе известны оба типа - тип указателя и тип объекта, на который ты хочешь его направить - логично использовать только первый вариант, тогда ошибка будет выявлена компилятором.
Только если ты присваиваешь одному указателю другой указатель на объект с неизвестным типом, ты должен использовать dynamic_cast.

14 окт, 10:25 #41 #1075334

Почему в С++ такой странный code style? Понимаю, что у С++ одно из самых старейших легаси, свои традиции и привычки, но почему повсюду (даже в учебных примерах) пишут такой нечитабельный вырвиглазный код?

void f() const
{
std::cout << m_x << '\n';
}

Ответы75335753367533875356

14 окт, 10:29 #42 #1075335

>>1075334
И что тут странного? По мне так то что ты привёл в пример это самое читабельное и понятное что может быть в C++, ты нечитабельное и вырвиглазное не видел.

14 окт, 10:31 #43 #1075336

>>1075334
Из code style тут только первая фигурная скобка перенесена да префикс m_ указывающий на поле класса. В остальном это язык, а не стиль. Однобуквенные имена для примеров это нормально.

14 окт, 10:36 #44 #1075338

>>1075334
Как тебе такое?

#include <iostream>

template<typename Tag, typename Tag::type M>
struct Rob {
friend typename Tag::type get(Tag) {
return M;
}
};

struct A {
A(int a):a(a) { }
private:
int a;
};

struct A_f {
typedef int A::type;
friend type get(A_f);
};

template struct Rob<A_f, &A::a>;

int main() {
A a(42);
std::cout << "proof: " << a.get(A_f()) << std::endl;
}

14 окт, 10:36 #44 #1075338

>>1075334
Как тебе такое?

#include <iostream>

template<typename Tag, typename Tag::type M>
struct Rob {
friend typename Tag::type get(Tag) {
return M;
}
};

struct A {
A(int a):a(a) { }
private:
int a;
};

struct A_f {
typedef int A::type;
friend type get(A_f);
};

template struct Rob<A_f, &A::a>;

int main() {
A a(42);
std::cout << "proof: " << a.get(A_f()) << std::endl;
}

Показать весь текст
Ответы75339

14 окт, 10:43 #45 #1075339

>>1075338
Нихуя не понял, что тут происходит?

24 Кб, 1093x660

14 окт, 11:30 #46 #1075352

>>1074841 (OP)
Вкатываюсь в многопоточность. За 5 минут на коленке собрал говнокод для суммирования последовательных чисел, чтобы просто проверить реально ли загружается несколько ядер. Запускается, работает, реально грузится 4 потока, но результат почему-то каждый раз разный как будто join() не работает или я х.з. что еще. Так что не так с этим говном?

Ответы7537375389754027557275573756107789578536

14 окт, 11:40 #47 #1075356

>>1075334
Потому что сам синтаксис языка такой. На С++ очень сложно, писать что-то читабельное и понятное, особенно новичкам и мидлам и зачастую тимлидам. Те кто могут использовать понятный code style в С++ это элита, но для этого надо очень хорошо знать язык и что испрользовать в языке а что нет. Например использовать очень ограниченно шаблоны, не использовать такие библиотеки типа boost, а лучше и без stl.
Вот, например, нормальные люди, кто пишет на С++ что-то посерьезней серверов у конторе у дяди коли, используют такие штуки как misra c++, embedded c++, rt c++ и т.д.
https://en.wikipedia.org/wiki/Embedded_C++

Ответы7536175607

14 окт, 11:45 #48 #1075361

>>1075356
Все так, только код с умеренным бустом, стл и шаблонами будет читаемее, чем очередная итерация вложенных циклов на "си с классами".

Ответы75371

14 окт, 11:57 #49 #1075371

>>1075361
Ну про буст я очень сомневаюсь, ибо на деле знаю что это такое. Стл можно впринципе использовать более менее, но опять же не все подряд и с умом, но это чревато, например чтобы использовать итераторы, которые сами по себе не очень хорошая вещь by design, чтобы не писать телеги типа
typename std::vector<my_super_class::my_type_t::value::type>::iterator it = my_super_class_object.vector.begin();
то вероятно всего лучше использовать auto, но использование auto скрывает тип и делает код непонятным аля
auto v = myobject.get();
поэтому авто тоже не стоит использовать, но понятно что использовать шаблонные телеги типа как в премере выше тоже не вариант, поэтому люди часто вообще отказываются от них, ибо как только ты начинаешь что-то использовать из С++, то сразу тянется куча зависимых костылей языка, для того, чтобы это работало и выглядело нормально.

Ответы7538175468

14 окт, 12:07 #50 #1075373

Слышь, бустеры, вместо того чтобы рассказывать кто больше знает умных слов, лучше на деле покажыте какой длины ваши стл, объяснив нюфане, что не так с его говном >>1075352

Ответы7538375387

14 окт, 12:21 #51 #1075381

>>1075371
>использование auto скрывает тип
Проблема IDE.

Ответы75393

14 окт, 12:28 #52 #1075383

>>1075373
case 1: A1 = s; // <- break;
case 2: B1 = s;
Угадай, что будет, если 1 отработает позже 2.

Ответы75395

14 окт, 12:35 #53 #1075387

>>1075373
Алсо, что будет если ввести k = 3?
A = B = C = D = 0
k = 7?
A = 1, B = 2, C = 3, D = 4
Не очень похоже на "сумму от 0 до k", верно?

Ответы75396

14 окт, 12:41 #54 #1075389

>>1075352
A1, B1... не надо помечать как volatile?

Ответы7539975564

14 окт, 12:45 #55 #1075393

>>1075381
При чем здесь вообще IDE?
Я говорю про синтаксис языка, который должен быть чистым и понятным, даже если он отображается в терминале 20х60 без подсветки синтаксиса.

Ответы75397

14 окт, 12:52 #56 #1075395

>>1075383
И чо? Разные потоки же.

Ответы75398

14 окт, 12:55 #57 #1075396

>>1075387
А зачем мне вводить k = 3, если я могу ввести k = 12? Вопрос был про то почему многопоточность не срабатывает, а не про защиту от дурака.

Ответы75398

14 окт, 12:57 #58 #1075397

>>1075393
Не надо давать уебанские названия переменным и функциям. Программисту в 95% случаях надо понимать смысл происходящего, поэтому там будет не myobject.get(), а auto c = car.get(); c.turnLeft();. Все что надо знать, что у car есть get, а у полученного типа есть turnLeft. В остальных 5% случаев в IDE наведет мышку и посмотрит, какой конкретно тип.
И конечно не надо писать код в терминале.

Ответы75405

14 окт, 13:02 #59 #1075398

>>1075395
Ты школьник? Извини, что уточняю.
У тебя незакрытый кейс в свитче. И потоки разные, а переменные общие, это и есть гонка потоков.
Допустим, второй поток отработал раньше. Он прыгает на case 2 и записывает B1. После чего отрабатывает первый поток. Он прыгает на case 1 и записывает A1 после чего идет дальше по кейсам и перезаписывает B1 этим же числом.
>>1075396
Так ты не делишь последовательность на 4 равных доли, если ты введешь 999 до отработает только до 996.

Ответы75403

14 окт, 13:06 #60 #1075399

>>1075389
Ну это вообще пиздец какая-то экзотика этот volatile. Там и так нечего в этих переменных оптимизировать. Ни в каких проверках они не участвуют. В каждую пишет только свой поток. На всякий случай проверил с volatile - не изменилось ничего.

14 окт, 13:09 #61 #1075402

>>1075352
pastebin.com - пихни сюда, чотбы я не набирал заново.

Ответы75406

14 окт, 13:11 #62 #1075403

>>1075398
Ты похоже еще более бесполезен, чем я.

1) Первый поток может записать только в переменную А1, потому что при вызове в функцию schet() бай дизайн передается num = 1. Второй поток может писать только в В1 и так далее. Нет там никаких гонок. Это разные кейсы, срабатывающие в разных котоках, в каждом свой.

2) А я не ввожу 999, я ввожу 996. Проблемы?

Ответы75404

14 окт, 13:12 #63 #1075404

>>1075403
>Второй поток может писать только в В1 и так далее.
>Нет break; в конце case
Дебилам не помогаю.

Ответы75415

14 окт, 13:13 #64 #1075405

>>1075397
>Не надо давать уебанские названия переменным и функциям
Это уже называется code style, который строится и зависит от базовых вещей в языке.
Тем более, что меняется от того что ты изменил название переменной в auto c = car.get() ?
Что за тип c? Это поинтер? Это ссылка? Или это копирование? Если копирование то как? Использует ли он COW или копирует весь объект побитово? Перегружен ли там оператор =?
Такой код сразу вызывает пачку вопросов и непонятков.
Если еще васяны пихают авто куда не попадя, дают методам и переменным невнятные имена, то такой код становится не поддающимся расшифровке, который можно смело выкидывать в помойку, ибо сам васян скорее всего забудет что там происходит через пару недель.

Ответы75407

14 окт, 13:16 #65 #1075406

>>1075402
Например https://pastebin.com/BEcj176w

14 окт, 13:17 #66 #1075407

>>1075405
>Что за тип c? Это поинтер? Это ссылка?
Какая разница? В IDE автокомплит подставит . или ->
>Или это копирование?
Не надо по уебански называть копирование гет-ом.
>Перегружен ли там оператор =?
Какая разница, если ты потом все равно какой то метод вызываешь.

Ответы75411

14 окт, 13:22 #67 #1075411

>>1075407
>Какая разница
>IDE подставит
>Какая разница
Мда, вот оно уже сейчас, поколение быдло-кодеров.

Ответы75418

14 окт, 13:23 #68 #1075415

>>1075404
Бля, сук, точно. Никогда не любил этот ебаный кейс. А ты не так уж плох, как кажешься на первый взгляд. Ладно, спасибо, бустите дальше.

14 окт, 13:28 #69 #1075418

>>1075411
Чушь не неси, а лучше посмотри какие нибудь слайды с CppCon14-17, никто не пишет std::map<std::wstring, std::map<std::wstring, int>>::iterator когда тебе нахер не сдалось знать, что конкретно там за тип, а тебе просто надо пройтись по нему фор-ичем, то достаточно просто auto и код становится читаемей и понятней, а не наоборот.

Ответы75422

14 окт, 13:34 #70 #1075422

>>1075418
Да че мне эти слайды смотреть, я все равно на с++ уже больше года не пишу и не хочу писать, ибо с++11 был последний гвоздь в крышку гроба.
Так как я по такой залупе вор ичем пройдусь если я даже не знаю что там внутри потмоу что там какая нибудь залупа типа
template<typename T>
void foo(T& val)
{
auto it = val.begin();
...
}

И как мне быть понять, что там за хуйня вообще происходит? И такого говна в с++ проектах обычно навалом.

Ответы7542475429

14 окт, 13:36 #71 #1075424

>>1075422
Проще взять какой-нибудь нормальный язык у которого все эти вещи из коробки и встроены в дизайн, а не как костылями все в с++.

14 окт, 13:42 #72 #1075429

>>1075422
И что твой пример изображает? Работаешь с полученным итератором как с любым другим.

14 окт, 13:42 #73 #1075431

Ушел с c++ в бигдату, хайлоад на джаве, теперь все как у людей, просыпаюсь с приятным предвкушением о хорошем рабочем дне. Чего и вам советую

бывший революционный оп

Ответы7543676474

14 окт, 13:49 #74 #1075436

>>1075431
Я вот тоже год назад стоял на развилке путей, думал тоже пойти в хайлод, чем я в принципе на с++ занимался, только на яве или scala, ибо доебало это говно в с++ с костылями. Но в итоге решил вкатиться в С и более системное программирование поближе к ядру ОС. Но теперь я бы ни за что не стал бы явистом ибо понимаю какое это дно похуже с++, с кучей макак вкатывальщиков из /b/. А на С в основном пишут крутые парни и обезьян и смузихлебов там вообще нету, ибо не модно и сложно. В общем, мне все нравится.

14 окт, 14:53 #75 #1075468

>>1075371
>но использование auto скрывает тип и делает код непонятным аля
>auto v = myobject.get();
.get гетает что именно? У большинства STL-функций имена с подсказками, а твой геттер что гетает?

Минус авто только в том, что я не могу его авточлен сделать. Гусары, молчать!

Ответы75477

14 окт, 15:05 #76 #1075477

>>1075468
>Минус авто только в том, что я не могу его авточлен сделать.
В прошлом треде ради лулзов соорудил нечто подобное:

template<class T> class Zalupa {
T value;
public:
T get() { return value; }
};
Zalupa<int> lupa;

class A {
decltype(lupa.get()) a = 1;
};

Ответы75491

14 окт, 15:19 #77 #1075491

>>1075477
Мне тут уже подсказали.
vector<int> V;
decltype(V)::iterator;

14 окт, 16:13 #78 #1075533

PWORD list;
PIMAGE_BASE_RELOCATION pIBR;

list=(PWORD)(pIBR+1);

Поясните нуфагу, что это за плюс один? Что будет в list?

Ответы75534

14 окт, 16:15 #79 #1075534

>>1075533
Не буду гуглить за тебя, что такой IMAGE_BASE_RELOCATION.

Ответы75537

4 Кб, 453x81

14 окт, 16:16 #80 #1075537

>>1075534

Ответы75546

14 окт, 16:42 #81 #1075544

>>1074841 (OP)
Объясните, в почему имена структур и типов не мешают друг другу. В каких неймспейсах они находятся? https://ideone.com/5CJXAs

В моем коде при помощи структуры с тэгом complex объявляется тип complex.

Что такое complex в объявлении конструктора?
complex(double re, double im)
: re(re), im(im) {}
Тип или структура?

Что такое complex в объявлении методов?
void complex::swap(complex & other

Ответы7555375554

14 окт, 16:46 #82 #1075546

>>1075537
pIBR+1 - это указатель на следующую в памяти структуру IMAGE_BASE_RELOCATION.
(PWORD) - это преобразование полученного указателя к указателю на WORD (который джва байта, вроде).

То есть, ты получишь указатель на первые два байта следующей структуры IMAGE_BASE_RELOCATION. Какому наркоману это понадобилось - не знаю.

Про касты можешь прочитать здесь: http://en.cppreference.com/w/cpp/language/explicit_cast

Ответы7554875558

14 окт, 16:49 #83 #1075548

>>1075546
То есть, на псевдокоде это будет
list=(PWORD) pIBR+sizeof(IMAGE_BASE_RELOCATION);
так?
Если да, то мне все понятно, спасибо.

Ответы7555375561

14 окт, 16:54 #84 #1075553

>>1075544
Двоеточие - это предлог "в" (только порядок другой). Какждый класс - это простанство имён, к членам которого ты можешь обратиться только через операторы ".", "->" и "::".
class T {
T(){}
}
- это конструктор.

class T {
T();
}

T::T (){}

- это объявление конструктора и объявление его снаружи.

T T::operator=(T rhs){}

- это оператор присвоения, определённый в классе T, принимающий T и возвращающий T.

>>1075548
Грубо говоря - да.

Ответы75555

14 окт, 16:55 #85 #1075554

>>1075544
Пофиг же, не? Это как написать typedef int int. Алсо структура это тоже тип.

Ответы75562

14 окт, 16:55 #86 #1075555

>>1075553
Заговорился.
>- это объявление конструктора и ОПРЕДЕЛЕНИЕ его снаружи.
>- это ОПРЕДЕЛЕНИЕ оператора присвоения, ОБЪЯВЛЕННОГО в классе T, принимающего T и возвращающего T.

14 окт, 17:02 #87 #1075558

>>1075546
>Какому наркоману это понадобилось - не знаю.
После этой структуры идет массив вордов неопределенной длины. Если вдруг тебе интересно.

14 окт, 17:10 #88 #1075561

>>1075548
>То есть, на псевдокоде это будет
>list=(PWORD) pIBR+sizeof(IMAGE_BASE_RELOCATION);
>так?
Что такое "на псевдокоде"? Арифметика указателей такая же, как в C++? Тогда не так.

Ответы75565

14 окт, 17:11 #89 #1075562

>>1075554
>Пофиг же, не? Это как написать typedef int int
Тогда зачем нужна идиома typedef struct?

Ответы75576

14 окт, 17:13 #90 #1075564

>>1075389
>A1, B1... не надо помечать как volatile?
Если ты не дебил — нет.

14 окт, 17:13 #91 #1075565

>>1075561
Если честно я не ебу какая там арифметика. Я хотел сказать что к адресу pIBR прибавляется размер этой структуры, и мы получаем указатель та следующую структуру, как если бы они шли подряд.

Ответы75566

14 окт, 17:14 #92 #1075566

>>1075565
>Я хотел сказать что к адресу pIBR прибавляется размер этой структуры
Тогда пиши
(char*) pIBR+sizeof(IMAGE_BASE_RELOCATION);

14 окт, 17:20 #93 #1075572

>>1075352
>Так что не так с этим говном?
От скольки до скольки складываешь?

14 окт, 17:25 #94 #1075573

>>1075352
А, уже увидел, что проблема в case и что её тут решили.

А volatile не добавляй.

14 окт, 17:35 #95 #1075576

>>1075562
Это про плюсы тред, а не про Си.

14 окт, 18:43 #96 #1075607

>>1075356
>embedded c++
Зашёл по твоей ссылке, вначале воодушевился, а потом дичь пошла.
> The following language features have been removed:
> <...>
> Exceptions
Серьёзно? Выкинуть исключения? Это просто гениальное "упрощение"
> Templates
Теперь надо под каждый пердёж создавать свой отдельный контейнер? И без смартпоинтеров?
По ссылкам всё мертво, по ссылкам 404, сами ссылки десятилетней давности...

Ответы75631

14 окт, 19:07 #97 #1075610

>>1075352
Че-то какой-то говнокод пиздец.
Во-первых, убери всю эту хуйню с глобальными переменными.
Короче вот пример от профи.

https://pastebin.com/mZfwhfj9

Ответы7562375624756287562975641

26 Кб, 755x229

14 окт, 19:30 #98 #1075623

>>1075610
>пример от профи.
if(threads == -1)
threads = std::thread::hardware_concurrency();
Очень надёжно! Профи видно сразу!

Ответы75625

30 Кб, 677x342

14 окт, 19:34 #99 #1075624

>>1075610
>vector
>chrono
>mutex
Ну у меня же не было задачи использовать как можно больше библиотек и контейнеров. Я просто хотел посмотреть реально ли работает этот thread и на сколько быстрее с ним идет вычисление, а то во всех обучалках одно говно какое-то с выводом сообщений в двух потоках, когда реально хуй поймешь параллельно они по факту выполняются или нет.

Ответы756347563575676

14 окт, 19:34 #100 #1075625

>>1075623
Ты шо ебонутый? Давай в програмке на коленке рандом хую с двача, все возможные кейсы очень маловероятных ошибок прорабатывать.

Ответы75626

14 окт, 19:36 #101 #1075626

>>1075625
Зачем вообще в parallel_sum что-то проверять? Скажи, что число потоков должно быть от 1. И пусть вызывающий передаёт правильное число, используя /dev/random или hardware_concurrency() и обрабатывая случай нуля как хочет.

Ответы75635

14 окт, 19:39 #102 #1075628

>>1075610
Ну и вообще, у тебя во все треды прилетает одинаковый int* res.

Ответы75639

14 окт, 19:40 #103 #1075629

>>1075610
> THREASHOLD
С engrish тоже в голос.

Ответы75639

14 окт, 19:44 #104 #1075631

>>1075607
Исключения выкинуты, т.к. лишний код, занимает и байты, и время исполнения, причем сами исключения возникают в 0,001%, а код этот работает постоянно. На встройке это критично. С шаблонами похожая проблема, ты напишешь один раз а компилятор его 100 раз размножит для разных типов, и программа опять не влезет никуда.

Ответы75668

14 окт, 19:45 #105 #1075634

>>1075624
А зря. Хроно это маст хэв, вектор тем более.

14 окт, 19:47 #106 #1075635

>>1075626
Так там число потоков опциональный аргумент, и если он опущен, то в функцию передается -1 и вызывается hardware_concurrency() Я думаю не существует имплементаций где он может вернуть 0. Конечно если у него линукс, можно было вызвать get_nprocs(), но у него то винда.

>>1075624
Использовал только самое необходимое.
vector - чтоб динамически алокейтить место под массив.
chrono - перформанс таймер.
mutex - чтоб отпечатать нормально в потоках.

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

Ответы75638

14 окт, 19:48 #107 #1075638

>>1075635
>Так там число потоков опциональный аргумент, и если он опущен, то в функцию передается -1
Чёт не вижу, что там есть значение по-умолчанию.

Ответы75640

14 окт, 19:50 #108 #1075639

>>1075628
Да тут обосрался. Надо атомарным его сделать.

>>1075629
лол, нашел до чег доебаться.

14 окт, 19:51 #109 #1075640

>>1075638
Так
int threads = -1;
в main

Ответы75642

14 окт, 19:52 #110 #1075641

>>1075610
>Короче вот пример от профи.
Ой-вей. Ты сначала зачем-то заполняешь числами массив, а потом суммируешь его.
Просто 13/10.

Ответы75643

14 окт, 19:54 #111 #1075642

>>1075640
Рассказываю "профи", что такое "опциональный аргумент":
static void parallel_sum(int a[], int size, int res, int threads = std::thread::hardware_concurrency());

static void parallel_sum(int a[], int size, int res, int threads)
{
if (threads == 0) threads = 1;
.....
}

Теперь threads — это опциональный аргумент. И если его не передавать, то там будет std::thread::hardware_concurrency()

Ответы75645

14 окт, 19:54 #112 #1075643

>>1075641
Лол. Ты вообще читал, пост а который я ответил? Я лишь переделал программу автора, где он разбирается в потоках.

Ответы75644

14 окт, 19:55 #113 #1075644

>>1075643
Читал. Там вроде просто числа суммиоровались, которые генерируются при суммировании.
А зачем их сначала писать в массив, а потом читать оттуда?

Ответы75646

14 окт, 19:55 #114 #1075645

>>1075642
Бля, а как ты будешь вызывать функцию эту, если аргумент приходит из командной строки?

14 окт, 19:56 #115 #1075646

>>1075644
>числа суммиоровались, которые генерируются при суммировании
Это как?

Ответы75648

14 окт, 19:58 #116 #1075648

>>1075646
https://pastebin.com/BEcj176w строка 12
А твоё однопоточное заполнение массива занимает в несколько раз больше времени, чем, собственно, суммирование.

Ответы75649

14 окт, 20:00 #117 #1075649

>>1075648
Ну ты пиздец. Смысл программы в функции parallel_sum а не в том что происходит до.

Ответы75654

14 окт, 20:01 #118 #1075654

>>1075649
Смысл программы в многопоточном суммировании последовательных чисел.
А не в том, как сделать это как можно тормознее.

Ответы7565675660

14 окт, 20:04 #119 #1075656

>>1075654
>Смысл программы в многопоточном суммировании последовательных чисел.
Так она именно это и делает.

Ответы75657

14 окт, 20:05 #120 #1075657

>>1075656
Она делает как быстрее. А ты — как можно медленнее.
Ты бы ещё в файл сначала записал числа, а потом считывал оттуда.

Ответы75658

14 окт, 20:08 #121 #1075658

>>1075657
Ты ебанутый? Какая разница откуда числа приходят, когда смысл суммировании массива с числами?

Ответы75659

14 окт, 20:09 #122 #1075659

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

Ответы75662

14 окт, 20:10 #123 #1075660

>>1075654
Тогда надо сразу на шаблонах, чтобы посчиталось в компайл тайме и выдало константу.

Ответы75661

14 окт, 20:10 #124 #1075661

>>1075660
Кому надо?

Ответы75666

14 окт, 20:12 #125 #1075662

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

Ответы75667

14 окт, 20:18 #126 #1075666

>>1075661
Тому, кто топит, что его вариант быстрее других.

42x53

14 окт, 20:19 #127 #1075667

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

Ага. Формулу прикрепляю картинкой.

Или ты имеешь в виду формулу без знаков "сумма" и т.д. (только с элементарными функциями?)? Готов для любой монотонной последовательности предъявить формулу суммы начального отрезка этой последовательности?

Ответы75671

14 окт, 20:22 #128 #1075668

>>1075631
Ты уж согласись тогда, что это не с читаемостью кода связано, а с ограничениями железа.

4 Кб, 152x40

14 окт, 20:32 #129 #1075671

>>1075667
Она же простая.

Ответы75672

14 окт, 20:33 #130 #1075672

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

Ответы75679

14 окт, 20:36 #131 #1075676

>>1075624
>и на сколько быстрее с ним идет вычисление
Ты вообще ослоёб? Если тебе быстро сложить надо, делай примерно так:
std::vector x;
// Fill x
auto result = cblas_dsum(x.size(), x.data(), 1);
cblas_dsum замени на функцию из твоей любимой математической библиотеки.

14 окт, 20:37 #132 #1075679

>>1075672
А, да, с прогрессией перепутал.

14 окт, 20:40 #133 #1075680

Посоны, есть ли какая-то возможность получать стектрейсы в релиз билдах, при условии что для этого билда есть map/pdb файлы?
Меня просто смущает то что по идее ведь если у нас программа состоит из кучи либ, каждая либа будет загружена в рандомное место в адрессспейсе, и как в таком случае привязывается return адресс к чему-то в мапфайле?

Ответы7579180676

14 окт, 20:46 #134 #1075682

double x;
for (x = 0.10; x <= 1; x + 0.09)
{ ... }
цикл зацикливается до бесконечности, чому?

Ответы75683

14 окт, 20:48 #135 #1075683

>>1075682
Потому-что x + 0.09 не увеличивает x
тебе нужно x+=0.09

Ответы75687

14 окт, 21:00 #136 #1075687

>>1075683
ну я и даун, спасибо

15 окт, 01:30 #137 #1075784

При работе с std::cin, можно ли считать его таким же по свойствам, как поток типа std::ifstream, создаваемый по какому-либо файлу?

Ответы757867579175792

15 окт, 01:37 #138 #1075786

>>1075784
http://eel.is/c++draft/iostream.objects#narrow.stream.objects-2

15 окт, 01:49 #139 #1075791

>>1075680
Чем дебуг-версия отличается, по-твоему?

Стектрейсы в релизе? Да запросто, но ты забыл про злоебучие оптимизации, которые могут заинлайнить или перемещать вызовы, при чём не все.
>>1075784
Можно. КРОМЕ того, что:
- в cin может прилететь feof не один раз. Т.е.: читаешь, юзер нажал Ctrl+D (или что там в твоей ОС), прилетел EOF, ты сбрасываешь состояние cin и можешь читать до следующего EOFa. С файлами может быть то же самое, если он не в одной программе открыт, наверное
- производительность cin/cout/... никакующая, если не отключить синхронизацию с stdin/stdout/...

Ответы80676

15 окт, 01:50 #140 #1075792

>>1075784
А, и ЕЩЁ: cin по-умолчанию текстовый, и изменить это ты можешь только с помощью freopen.

15 окт, 03:56 #141 #1075835

>>1075099
Лан, вот тебе код. https://pastebin.com/UTK4PwEs
Там много всего захардкожено, но молодые-шутливые с лёгкостью перепишут так, чтобы исходные данные можно было задавать с помощью конфига на JSON.
Для компиляции нужна header-only однофайловая библиотека exprtk https://github.com/ArashPartow/exprtk

exprtk.hpp весит полтора мегабайта, так что компилится этот код минуту-полторы. Зато работает быстро. Без оптимизаций находит все решения за 0.5 сек, с оптимизациями — за 0.01 сек.

628 Кб, 850x1201

15 окт, 08:14 #142 #1075873

>>1074841 (OP)
Про FAQ. Почему Липман, а не Прата или Лафоре? Или, в конце-концов, не Шилдт? Ладно, страус сложный, но щит проще их всех, да и примеры охуительно наглядные. Ну и да, все эти прекрасные книжки не рассказывают о boost, qt и прочем, а об STL - обзорно (для сравнения, тот же Шилдт в книжке о Джаве рассматривает АВТ, Свинг, Сервлеты...). При этом книжки непомерно большие, а хочется чего-то вроде кьюик старт гайда (С++ за 24 часа здорового человека, если проще). Что скажете, что посоветуете? Язык менять не хочется, ибо нужна универсальность и низкое потребление ресурсов. Джава и шарп тянут за собой свои говна, пайтон и жс тянут за собой свои интерпретаторы + они медленные даже для типовых приложений, а все остальные языки на десктопе мало кому всрались, неуниверсально.

Ответы7588576471

15 окт, 09:11 #143 #1075885

>>1075873
Если тебе нужно что-то высокопроизводительное, то бери С++. У липпмана одна из самых лучших книг по крестам, остальные - говно, рассчитанное на абсолютных ньюфагов.
А если тебе просто надо делать десктопные приложения, то учи js и electron, сейчас гуи туда движется.

Ответы75914

15 окт, 10:31 #144 #1075914

>>1075885
Можешь объяснить, почему остальное - говно?
Нет, анон, мне не нужна какая-то особенная производительность, но я хочу
>просто
писать приложения, это правда, но чтобы при этом это были приложения как винамп - охуенный, лучший в истории аудиоплеер с моментально отзывчивым интерфейсом, моментальным же запуском, всем необходимым, и при этом весящий в памяти 3 мегабайта, не пытающийся подтянуть за собой пол-хрома. Или вот как нотпад++ - охуенный, фичастый эдитор текста, (если) уступающий (да и то, за счет плагинов) только всяким эклипсам и сублаймам, но весящий в разы меньше и работающий на порядки быстрее перечисленных. И уж тем более, меньше весящий и быстрее работающий в сравнении с брэкетсами-атомами.жс. Что-то вот такое мне нужно. Я не собираюсь писать браузеры, фотошопы и подобную хуйню, моя цель - маленькие, быстро и просто (да, знаю, это не совсем про цпп) разрабатываемые приложения, которые не только выглядят, но и работают хорошо (без тормозов, без запуска длиной в 20 секунд, без пожирания 200 метров оперативки на хеллоуворлд, без нетфреймворков, электронов и jre). Поэтому я думал в сторону С++ (не хардкорного, база, основа) + Qt или подобный фреймворк. Что скажешь, няша?

Ответы76310

15 окт, 10:50 #145 #1075921

Подскажите, как в C++98 делали списочную инициализация вектора?
std::vector<int> example{1, 2, 3, 4, 5};

Ответы7592476142

15 окт, 10:59 #146 #1075924

>>1075921
Никак. Можешь объявить массив и инициализировать им.

Ответы75925

15 окт, 11:00 #147 #1075925

>>1075924
Да, я уже понял, жаль мне олдфагов.

Ответы75943

15 окт, 11:32 #148 #1075936

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

Но памяти мало, и считывать в вектор, который потом предполагается обработать, не хочется.
Подскажите, получится ли работать с неким входным потоком с помощью std::istream_iterator? Или здесь только решение вида "достать (getchar) символ, если он из тех, что надо заменить, закинуть (putback) во входной поток замененный символ"?

И какое (линейное/постоянное) время может занять unget символа?

Ответы76142

15 окт, 11:53 #149 #1075943

>>1075925
жаль мне ньюфань в с++. Вангую через лет 5 с++ будет медленее и в 50 раз более громоздким чем та же ява. Ну а потом когда встроят туда JS и электрон прикрутят, вообще будет охуенчик.

Ответы759477595076142

15 окт, 11:56 #150 #1075947

>>1075943
Ну тебе же ничего не мешает не использовать эти списки инициализации, можешь хоть на голом C писать с ассемблерными вставками в отличии от явы, в чём проблема?

Ответы7595076059

15 окт, 12:02 #151 #1075950

>>1075943
>>1075947
И да, списки инициализации наоборот является ускорением, а через 5 лет будет стандарт C++20, в основном что там будет известно уже сейчас, с тебя хуёвая как ванга, так и программист.

Ответы76059

helplease 15 окт, 13:46 #152 #1076036

Короче. Есть окно, которое создано с помощью SFML либы.
Нужно прикрутить к этому окну drag and drop. То есть. У меня на рабочем столе лежит какой нибудь файл. Я его перетаскиваю мышкой в окно и получаю путь к нему. Гуглить пытался. Ничего не нашёл. Вообще как в шиндовс такое сделать?

Ответы76042

15 окт, 13:55 #153 #1076042

>>1076036
Вот как это делается на Winapi:
https://stackoverflow.com/questions/2263586/how-to-get-path-of-file-dragged-into-win32-app-and-delete-it
Как это делать на SFML я не знаю, у них и спрашивай, раньше я тоже использовал SFML, но бросил его, у меня свой велосипед.

Ответы7606476132

15 окт, 14:09 #154 #1076059

>>1075947
>>1075950
>Пук

Ответы76067

15 окт, 14:12 #155 #1076061

>>1074841 (OP)
Какой учебник лучше взять ньюфегу. Если что, я оче хорошо понимаю, когда в книге есть упражнения.
В факе рекомендуют эти:
Бьерн СтрауструпПрограммирование. Принципы и практика использования C++
Стэнли Липпман, Жози Лажойе и Барбара МуЯзык программирования C++
Стивен ПратаЯзык программирования C++

Ответы76085

15 окт, 14:14 #156 #1076064

>>1076042
Эх. Придётся всё таки юзать winAPI. Хорошо что хоть SFML может handle окна и объектов ядра отдавать. А то бы вообще горе было.

15 окт, 14:16 #157 #1076067

>>1076059
Школьник, ты тред перепутал, тебе сюда >>1067944 (OP)

Ответы76086

15 окт, 14:17 #158 #1076069

Страуструп язык программирования с++ самое свежее издание.
Ещё можешь глянуть
https://www.slideshare.net/olvemaudal/deep-c/13-What_will_happen_if_you
И
https://www.slideshare.net/adankevich/c11-15621074
и вообще по 14 стандарту поищи чего там же

15 окт, 14:57 #159 #1076085

>>1076061
Да.

93 Кб, 695x950

15 окт, 14:57 #160 #1076086

>>1076067
Пади падмойся маня

Ответы7619676239

helplease 15 окт, 16:21 #161 #1076132

>>1076042
https://ideone.com/vbRXUr
Хули оно не драг анд дропается?

Ответы76141

15 окт, 16:42 #162 #1076141

>>1076132
Короче как я понимаю в чём моя проблема. У созданного sfml окна есть свой обработчик коллбеков. Мне нужно как-то сделать так, чтобы перехваченное сообщение передавалось в функцию обработчик этого окна и в дополнении к этому нужно изменить эту функцию, чтобы она обрабатывала WM_DROPFILES сообщения.
Как сделать-то это?

Ответы76144

15 окт, 16:43 #163 #1076142

>>1075921
Да никак! Пушили из константного массива.
http://en.cppreference.com/w/cpp/container/vector/vector - почти все конструкторы в 11+, а аггегатом вектор не является.
>>1075936
В каком виде нужен результат? Сделай свой класс, наследник basic_streambuf:
http://en.cppreference.com/w/cpp/io/basic_streambuf
внутри этого класса будешь манипулировать данными.
Сделанный буфер можешь подсунуть в другой поток: http://en.cppreference.com/w/cpp/io/basic_ios/rdbuf
http://en.cppreference.com/w/cpp/io/basic_istream
>Но памяти мало, и считывать в вектор, который потом предполагается обработать, не хочется.
>Подскажите, получится ли работать с неким входным потоком с помощью std::istream_iterator?
Типа, если пихать всё обратно, память не расходуется?
>std::istream_iterator is a single-pass input iterator that reads successive objects of type T from the std::basic_istream object for which it was constructed, by calling the appropriate operator>>.
>>1075943
Типа, конст-массив память не занимает, а списки инициализации - занимают. Так надо понять тебя?

15 окт, 16:48 #164 #1076144

>>1076141
А всё. Понял. Можно winAPI окно описать, а потом его хендел передать как параметр при создании SFML окна. Типа
sf::RenderWindow SFML_window(winAPI_window);

15 окт, 17:07 #165 #1076157

АААА ищу современный годный учебник программирования с Win32 API на C++, чтобы прямо для даунов с примерами кода. Такой существует?

Ответы7616076163

15 окт, 17:12 #166 #1076160

>>1076157
Нет, а нахуй надо? И так всё понятно/

15 окт, 17:19 #167 #1076163

>>1076157
Есть grey hat, то там python.

15 окт, 18:08 #168 #1076192

Двач подскажите книгу по C++ для продвинутых, желательно с уклоном в ООП.

15 окт, 18:15 #169 #1076196

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

Ответы76203

15 окт, 18:33 #170 #1076203

>>1076196
Когда сложность О(n^3) то одна лишняя инструкция может замедлить общую скорость на 10-20%, а доверяться компилятору на то что он там соптимизирует хорошо, не вариант, ибо я сначала на интрисиктах сделал, но посмотрев выхлом gcc решил переделать все сам.

Ответы76231

15 окт, 19:06 #171 #1076231

>>1076203
Сто пудов даже бенчмарк не гонял, человек-ассемблер.

Ответы76236

15 окт, 19:19 #172 #1076236

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

15 окт, 19:22 #173 #1076239

>>1076086
Свинья

15 окт, 19:24 #174 #1076241

Тут правда сидят одни свиньи, да?

15 окт, 20:32 #175 #1076269

Смотрите че есть
https://cpp-school.unigine.com/#video-lectures

15 окт, 20:51 #176 #1076282

Если кому интересно как прикрутить drag and drop к SFML окнам. То
1. Получаешь хендел окна SFML с помощью getSystemHandle()
2. Разрешаешь ему drag and drop с помощью DragAcceptFiles
3. пишешь свою функцию обработчик, которая LRESULT CALLBACK
4. Сохраняешь старую функцию обработчик этого окна и подменяешь её своей с помощью SetWindowLongPtr. Пример:
WNDPROC pOldProc = (WNDPROC)(SetWindowLongPtr(window.getSystemHandle(), GWLP_WNDPROC, (LONG_PTR)myWindowProc));
5. При обработке сообщений если это сообщение WM_DROPFILES делаешь всё что тебя надо и выходишь. Если не WM_DROPFILES, то прыгаешь на старую функцию обработчик с помощью CallWindowProc
6...
7. Профит.

Ответы76284

15 окт, 20:58 #177 #1076284

>>1076282
Госпади да все насрать
Принес какое-то парашу под винду.

15 окт, 21:40 #178 #1076310

>>1075914
>почему остальное - говно?
Я, видимо, неправильно высказался. Для ньюфагов шилдт и прата, может быть, лучше липпмана. Но если у тебя уже есть опыт в программировании, то может есть смысл взять книгу для более продвинутых?
>Что скажешь, няша?
Вроде все хорошо
Но кому нужны в 2017 простые десктопные приложения? Сложные приложения, которые требуют высокой производительности остаются на десктопе, все простое уезжает в веб.

Ответы7632476471

15 окт, 22:14 #179 #1076324

>>1076310
Слушай, для ньюфага норм начинать со Страуструпа?

Ответы76446

16 окт, 02:00 #180 #1076446

>>1076324
Как по мне он сложный для ньюфага.

16 окт, 02:25 #181 #1076448

2ch, почему g++ позволяет создавать массив переменной длинны.

Ответы76466

16 окт, 04:48 #182 #1076466

>>1076448
-pedantic -std=c++98 (или другого года) уже включил?
Ты про
int a=5;
int b[a];
? Это только в Си и в расширениях языка.

16 окт, 06:30 #183 #1076471

>>1076310
>Для ньюфагов шилдт и прата, может быть, лучше липпмана.
Я не совсем ньюфаг, но у Шилдта таки очень много воды для тех, кто не знает про условия и циклы, а тот же STL очень обзорно разбирается, фактически рерайт документации. Прата жирен, но там куча наглядных примеров. Липпман таки лучше по итогу, после него будешь лучше шарить, чем осилив 1.5к страниц Праты?
>Но кому нужны в 2017 простые десктопные приложения? Сложные приложения, которые требуют высокой производительности остаются на десктопе, все простое уезжает в веб.
Не всем по кайфу пользоваться всем простым за 19.5 евро в месяц, да еще и при необходимости держать запущенным интернет.
>>1075873
Бамп

16 окт, 07:05 #184 #1076474

>>1075431
Пили стори. Мне вот Джава всегда представлялась лютейшим говном. Сейчас я в 2017 сижу на Эклипсе написанном на джаве и бугуртю от каждого её движения.
А вот представить её в хайлоаде - я вообще не могу. Онаж сама 90% хайлоада и сожрёт своим выполнением. Развей мои сомнения или заблуждения.

16 окт, 10:58 #185 #1076524

Нафаня-вопрос.

Сумма цифр числа.
В цикле с предусловием все понятно (прилеплено ниже).
Как то же самое только с постусловием замутить? (do while)
Чому у меня он тупа последнюю цифру числа вываливает?

void main()
{
int a, s;
cin >> a;
s = 0;
while (a > 0)
{
s += (a % 10);
a /= 10;
}
cout << s << endl;
}

Ответы7652676554

16 окт, 11:07 #186 #1076526

>>1076524
Сорян, ошибку понял.
Писал по аналогии с паскалевским repeat until.
Немножко каша в голове.
Они ведь не идентичны.

16 окт, 12:54 #187 #1076554

>>1076524
Не могу понять, где ты мог ошибиться, ведь while от dowhile отличается ровно одним - гарантией выполнения одного шага. Результат твоей программе от замены while на dowhile с таким же условием не зависит НИКАК.

Ответы77475

48 Кб, 1280x720

16 окт, 16:39 #188 #1076668

Доброго ранку. Ситуация следующая.

Есть функция, которая принимает вектор по ссылке:

inline void getObjectsFromFile(vector<computer> &vecComp)
{
vector<NetInfo> vecNetInfo;
computer Comp;
NetInfo C;

ifstream fin("networkinfo.txt");
streamsize nameLength = 18, IPLength = 17, MACLength = 13;
C.Name = new char[18];
C.IP_address = new char[17];

int i = 0;
while (1)
{

vecNetInfo.push_back(C);
fin.getline(vecNetInfo.Name, nameLength, '\t');
fin.getline(vecNetInfo.IP_address, IPLength, '\t');
fin.getline(vecNetInfo.MAC_address, MACLength, '\n');

vecComp.push_back(Comp);
vecComp.Info = vecNetInfo;

showComputerInfo(vecComp);

if (fin.fail())
break;
i++;
}
fin.close();

for (int i = 0; i < vecComp.size(); i++)
{
showComputerInfo(vecComp);
}
}

структура NetInfo объявлена вот так:

struct NetInfo
{
char IP_address;
char MAC_address[13];
char Name;
};
она же является полем класса computer.

Функция возвращает вектор computer'ов. Но у них сохраняется только поле MAC_address. А остальные - хранятся во время выполнения функции. Но не сохраняются при выходе из неё.
Что я делаю не так?

48 Кб, 1280x720

16 окт, 16:39 #188 #1076668

Доброго ранку. Ситуация следующая.

Есть функция, которая принимает вектор по ссылке:

inline void getObjectsFromFile(vector<computer> &vecComp)
{
vector<NetInfo> vecNetInfo;
computer Comp;
NetInfo C;

ifstream fin("networkinfo.txt");
streamsize nameLength = 18, IPLength = 17, MACLength = 13;
C.Name = new char[18];
C.IP_address = new char[17];

int i = 0;
while (1)
{

vecNetInfo.push_back(C);
fin.getline(vecNetInfo.Name, nameLength, '\t');
fin.getline(vecNetInfo.IP_address, IPLength, '\t');
fin.getline(vecNetInfo.MAC_address, MACLength, '\n');

vecComp.push_back(Comp);
vecComp.Info = vecNetInfo;

showComputerInfo(vecComp);

if (fin.fail())
break;
i++;
}
fin.close();

for (int i = 0; i < vecComp.size(); i++)
{
showComputerInfo(vecComp);
}
}

структура NetInfo объявлена вот так:

struct NetInfo
{
char IP_address;
char MAC_address[13];
char Name;
};
она же является полем класса computer.

Функция возвращает вектор computer'ов. Но у них сохраняется только поле MAC_address. А остальные - хранятся во время выполнения функции. Но не сохраняются при выходе из неё.
Что я делаю не так?

Показать весь текст
Ответы7668076732

12 Кб, 225x225

16 окт, 16:50 #189 #1076680

>>1076668
О, заебок. Сам всё починил.
Просто в цикле выделять память надо было:
vecNetInfo.push_back(C);
vecNetInfo.IP_address = new char[17];
vecNetInfo.Name = new char[18];

Ответы76756

16 окт, 16:56 #190 #1076683

Кто-нибудь юзал C++ AMP? Как вообще по сравнению с OpenCL/CUDA? На Azure запускали?

Ответы76713

16 окт, 17:39 #191 #1076713

>>1076683
Мне кажется, что по производительности будет что-то наравне с вычислительными шейдерами OpenGL только без лишних ебот. А на деле получается что CUDA будет нагибать и первое и второе (причем, судя по всему, OpenCL на NVidia карточках работает так себе, у них CUDA в приоритете).
Все, что не CUDA нахуй не нужно, убедился давно сам, а эти OpenCL - выебоны для нищуков.

Ответы76748

16 окт, 18:28 #192 #1076732

>>1076668
thanks bro, pobleval. worst C++ code I've ever seen

Ответы76915

784 Кб, 800x1201

16 окт, 18:51 #193 #1076745

Хелпаните аутисту

Хочу прочитать весь список. Имеются структуры

struct structure
{
std::string album;
std::string singer;
int date;
int songs;
structure next;
};
struct dyn_list {
structure head;
structure* tail;
};

Как мне грамотно оформить функцию, в которой я вывожу все структуры(весь список) через рекурсию(можно и не через неё)?

void CASE2(dyn_list l) // вот тут неправильно
{
while (l.head != NULL)
{
std::cout << "Album name:" << l.head->album << std::endl;
std::cout << "Singer:" << l.head->singer << std::endl;
std::cout << "Release date:" << l.head->date << std::endl;
std::cout << "Number of songs:" << l.head->songs << std::endl;
CASE2(l.head->next); // вот тут неправильно
}
return;
}

784 Кб, 800x1201

16 окт, 18:51 #193 #1076745

Хелпаните аутисту

Хочу прочитать весь список. Имеются структуры

struct structure
{
std::string album;
std::string singer;
int date;
int songs;
structure next;
};
struct dyn_list {
structure head;
structure* tail;
};

Как мне грамотно оформить функцию, в которой я вывожу все структуры(весь список) через рекурсию(можно и не через неё)?

void CASE2(dyn_list l) // вот тут неправильно
{
while (l.head != NULL)
{
std::cout << "Album name:" << l.head->album << std::endl;
std::cout << "Singer:" << l.head->singer << std::endl;
std::cout << "Release date:" << l.head->date << std::endl;
std::cout << "Number of songs:" << l.head->songs << std::endl;
CASE2(l.head->next); // вот тут неправильно
}
return;
}

Показать весь текст
Ответы76749

16 окт, 18:55 #194 #1076748

>>1076713
Ты дебил? CUDA не работает на АМД карточках и никаких других. И если ты не пишешь какие-то специальное приложение, которые пишется специально под нвидиа карточки, то используя CUDA ты теряешь половину потребителей твоего приложения.
Это все равно что писать кроссплатформенные игры на Direct3D.
Все нормальные люди используют OpenCL и OpenGL.

Ответы77578

16 окт, 18:55 #195 #1076749

>>1076745
сука код поехал по пизде.... ща пофикшу....

struct structure
{
std::string album;
std::string singer;
int date;
int songs;
structure next;
};

struct dyn_list
{
structure head;
structure* tail;
};

void CASE2(dyn_list l) // вот тут неправильно
{
while (l.head != NULL)
{
std::cout << "Album name:" << l.head->album << std::endl;
std::cout << "Singer:" << l.head->singer << std::endl;
std::cout << "Release date:" << l.head->date << std::endl;
std::cout << "Number of songs:" << l.head->songs << std::endl;
CASE2(l.head->next); // вот тут неправильно
}
return;
}

16 окт, 18:55 #195 #1076749

>>1076745
сука код поехал по пизде.... ща пофикшу....

struct structure
{
std::string album;
std::string singer;
int date;
int songs;
structure next;
};

struct dyn_list
{
structure head;
structure* tail;
};

void CASE2(dyn_list l) // вот тут неправильно
{
while (l.head != NULL)
{
std::cout << "Album name:" << l.head->album << std::endl;
std::cout << "Singer:" << l.head->singer << std::endl;
std::cout << "Release date:" << l.head->date << std::endl;
std::cout << "Number of songs:" << l.head->songs << std::endl;
CASE2(l.head->next); // вот тут неправильно
}
return;
}

Показать весь текст
Ответы7675376886

16 окт, 18:58 #196 #1076753

>>1076749
Бля забаньте это имбициала, засирающего тред своей парашей, который даже не додумался использовать pastebin или подобное, что свое говно запостить. Пиздец. Репорт.

13 Кб, 200x382

16 окт, 18:59 #197 #1076756

>>1076680
>vector.push_back
>new char[17]

Ответы76915

16 окт, 22:18 #198 #1076886

>>1076749
Свинья, блять, просто свинья

16 окт, 23:25 #199 #1076915

>>1076732
Вам не понять
>>1076756
Хули непонятного? Добавляю элемент в вектор, а потом выделяю память для полей структуры

Ответы76920

16 окт, 23:44 #200 #1076920

>>1076915
Непонятно зачем комбинировать нормальные приемы и говно мамонта.

Ответы76936

17 окт, 00:18 #201 #1076936

>>1076920
Вектор я использую, чтобы передать массив объектов класса в функцию. А в структуре NetInfo у меня char-указатели, потомучто я использую некоторые функции winapi, которые принимают именно char. И ещё им надо выделять память через new, иначе getline() ничего в них не запишет.
Конечно, я бы мог объявить вектора символов вместо char, но тогда придётся ВСЮ прогу переписывать.

17 окт, 11:48 #202 #1077088

Какой же я грязный прогер, от меня воняет, волосы комок сала, в душе не был уже 2 месяца, из дома не выхожу только в макдональдс через дорогу, в квартире просто свалка из мусора, мусор прям выкидываю на пол, кот зассал весь коридор и мне похуй воняет пиздец но мыть лень ибо прогаю 24/7. Что делать то?

Ответы77197

17 окт, 17:01 #203 #1077197

>>1077088
Если бы я был твоим сожителем, я бы сгрёб весь мусор к тебе на кровать и на клавиатуру. Можешь сделать так же и посмотреть на эффект. Мотивации для сохранения чистоты в доме и сохранения в чистоте себя, кроме общения с другими людьми, быть не может. Раз ты ни с кем лично не общаешься, она тебе и не нужна. Ещё могут завестить тараканчики, но они няши, хоть и бегают везде, пока ты их не видишь.

Ответы77477

18 окт, 07:22 #204 #1077475

>>1076554
Я делал по аналогии с repeat-until из паскаля.
Типа, там условия менять нужно.
А как оказалось на крестах эти циклы отличаются только одним проходом, как ты и сказал.

512x512

18 окт, 07:53 #205 #1077477

>>1077197
>Если бы я был твоим сожителем
Да какие там у него сожители...

18 окт, 08:14 #206 #1077479

Эээ, чего как малолюдно в треде-то?

18 окт, 12:00 #207 #1077529

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

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

Ответы775957759977623

18 окт, 12:27 #208 #1077554

>>1075062
Если там нет хотяб tesla p100 для вычислений на половинной точности, то хвалится нечем. Поставь хоть 1080, чтоб vgg-16 на нормальной пачке влезал.

18 окт, 13:08 #209 #1077578

>>1076748
>> половину потребителей
Кек, о каких приложениях речь, маня? Адобе алтер эффектс, конвертеры или еще что - это ширпотреб. Определенно, там есть своя аудитория потребителей.
Есть множество специализированных приложений, которые узко ориентированы на CUDA (те же нейроночки для спецзадач и прочее), потому что людям нахуй не уперлось доплачивать за энергонеэффективное говно и за разработку для этого мусора.

18 окт, 13:49 #210 #1077595

>>1077529
New - это оператор динамического выделения памяти. То есть с помощью него ты просто резервируешь место в памяти.
Для начала покури указатели и ссылки.

Ответы77599

18 окт, 14:03 #211 #1077599

>>1077595
Нихуя, вместе с new вызывается и конструктор, а ещё бывает placement new.
>>1077529
new нужен или необходим тебе как минимум в четырёх случаях:
- ты пишешь программу для интерфейса, который принимает ссылки на динамические объекты (и потом сам разрушает их)
- тебе нужно сделать большой объект, который на стек не поместится (std::array, например)
- placement new
- тебе нужно сделать smart-указатель (но и здесь можно обойтись без new)
Если твой случай не такой, можешь смело НЕ использовать new, он тебе с вероятностью 99,9999% не нужен.

Ответы77604

18 окт, 14:14 #212 #1077604

>>1077599
Он вообще спросил как с помощью new переменные ОБЪЯВЛЯТЬ. Наверняка это ньюфаг, а ты ему про интерфейсы, дин. объекты и smart-указатели заливаешь.

Ответы77623

18 окт, 15:04 #213 #1077623

>>1077604
Более-менее очевидно то, что ньюфренд говорит о
T ЗВЁЗДОЧКА t=new T();
Он читаетт чужой код и попросил пояснить, я пояснил.
>>1077529
Олсо, есть другие редкие случаи, связанные с ООП.

Ответы77630

18 окт, 15:05 #214 #1077624

>>1074849
Какой же классный у этой станции рейд массив!

18 окт, 15:17 #215 #1077630

>>1077623
Держу пари, он говорил о
T *t = new T;

Ответы77683

18 окт, 15:31 #216 #1077635

Ответьте на вопросы про формальную верификацию, аноны:
https://2ch.hk/pr/res/1077629.html (М)

Ответы77638

18 окт, 15:39 #217 #1077638

>>1077635
>выучил новое слово

18 окт, 16:29 #218 #1077683

>>1077630
Оба варианта правильны для конструкторов без параметров.

18 окт, 17:49 #219 #1077730

Двач, в одном месте пишется что map\set являются бинарными деревьями поиска, в другом то что красно-чёрными деревьями, что из этого верно? И чем являются контейнеры multimap\multiset?

Ответы77742

18 окт, 18:21 #220 #1077742

>>1077730
>в одном месте пишется что map\set являются бинарными деревьями поиска, в другом то что красно-чёрными деревьями, что из этого верно?
Красно-чёрные деревья это вид двоичных деревьев поиска.

Ответы77746

18 окт, 18:28 #221 #1077746

>>1077742
Хорошо, а что с этим >И чем являются контейнеры multimap\multiset?

Ответы77747

18 окт, 18:29 #222 #1077747

>>1077746
Скорее всего тем же, просто вместо значений в дереве хранятся списки значений.

Ответы77766

18 окт, 19:23 #223 #1077766

>>1077747
Может быть и в точности тем же деревом, только со стабильным алгоритмом сортировки.

18 окт, 22:45 #224 #1077856

Есть какой-нибудь велосипед для преобразования шестнадцатеричной строки в байты?

Ответы77914

18 окт, 22:51 #225 #1077860

Антуаны, прошу вашей помощи
Хочу сделать обёрту для вызовов java кода из с++
сейчас ипусь с CMakeLists.txt ибо плюсы использовал раньше только ради лаб в унике

пока имею такое дерьмицо, которое ессесно не работает
https://pastebin.com/9UL2AdHQ

2 цистерны чая тому, кто поможет

Ответы778677794877956

18 окт, 23:00 #226 #1077867

>>1077860
Слишком мало информации, чтобы помочь. Показывай ошибку, рассказывай про операционку, куда что установлено и.т.п.

Ответы77875

18 окт, 23:17 #227 #1077875

>>1077867
Операционка linux mint 18.2
ide clion
JAVA_HOME=/opt/jdk-1-8/jdk1.8.0_141

ошибка
/test-cpp-jni/wrapper/WrapperJNI.cpp:6:17: fatal error: jni.h: Нет такого файла или каталога
compilation terminated.
CMakeFiles/test_cpp_jni.dir/build.make:86: ошибка выполнения рецепта для цели «CMakeFiles/test_cpp_jni.dir/wrapper/WrapperJNI.cpp.o»

Ответы7790777914

132 Кб, 1147x844

18 окт, 23:57 #228 #1077895

>>1075352
//мимопроходил

Ответы779467806778536

19 окт, 00:30 #229 #1077907

>>1077875
Покажи кеш CMAKE

Ответы77909

19 окт, 00:34 #230 #1077909

>>1077907
https://pastebin.com/4fBwY2yG

Ответы77995

19 окт, 00:48 #231 #1077914

>>1077856
В бусте разве что. Если строка с пробелами можно использовать
http://en.cppreference.com/w/cpp/header/iomanip
но всё равно цикл будет.
>>1077875
Ясен хуй, ошибка в исходнике. Имя включаемого файла, лежащего рядом с исходником, должно быть в кавычках, а не в угловых.

Ответы7791977920

19 окт, 01:04 #232 #1077919

>>1077914
не работае и в кавычках, товарищ
Cannot find jni.h

19 окт, 01:06 #233 #1077920

>>1077914
да и он же не лежит рядом с исходником, разве не?
я не копировал его в папку проекта, я пытаюсь его из JAVA_HOME/include подгрузить

Ответы77954

19 окт, 02:08 #234 #1077946

>>1077895
i <= CONFIG_THREAD_COUNT

19 окт, 02:14 #235 #1077948

>>1077860
https://stackoverflow.com/a/7716814/8686134

Ответы77964

19 окт, 02:53 #236 #1077954

>>1077920
Откуда я знаю? Увидел что-то похожее:
main.cpp
wrapper/WrapperJNI.cpp
wrapper/WrapperJNI.h

Можно включить более подробный вывод, понятнее будет.

Ответы779607796377965

19 окт, 03:05 #237 #1077956

>>1077860
Зачем указывать REQUIRED и потом проверять if (Java_FOUND)?

Ответы77960

19 окт, 03:24 #238 #1077960

>>1077954
>wrapper/WrapperJNI.cpp
>wrapper/WrapperJNI.h
анон, ты меня спас наверное
спасибо тебе человеческое!
>>1077956
пробовал всякое, поэтому осталось)

19 окт, 03:32 #239 #1077963

>>1077954
не, не помогло
всё равно
fatal error: jni.h: Нет такого файла или каталога
подключать пытаюсь и в кавычках и в скобках
всё равно ide говорит cannot find jni.h
ну вот и где я довен?

Ответы77964

19 окт, 03:33 #240 #1077964

>>1077963
>>1077948

Ответы77968

19 окт, 03:34 #241 #1077965

>>1077954
ОЙ СОРЯН, я все же довен.
пора спать наверное
забыл прилинковать

19 окт, 03:41 #242 #1077968

>>1077964
а ещё все же решил проверить ${JAVA_HOME}
и естественно мне ничего не вывело, сидел тупил .-.

Ответы77995

19 окт, 06:20 #243 #1077995

>>1077909
>>1077968
Надо юзать не FindJava.cmake, а FindJNI.cmake, как уже сказал другой антуан. В кеше должен появиться JAVA_HOME, а лучше Java_INCLUDE_DIRS

19 окт, 10:07 #244 #1078061

2ch, мне во всей программе нужно сменить тип с int на long long int, как это можно сделать?

Ответы7806478098

19 окт, 10:15 #245 #1078064

>>1078061
Делаешь в хедере typedef long long int idx_t;
Меняешь тип индексов на idx_t с int.

Ответы78151

19 окт, 10:23 #246 #1078067

>>1077895
Вот эта говнокод.
Я даже вникать не стал.
Тотально нечитабельно.
Если бы ты был моим подчененным я бы тебя уволил за такое.

Ответы78131

19 окт, 12:00 #247 #1078098

>>1078061
Самый топорный вариант - автозамена с помощью регекса, но автозамене похер на комментарии.

Ответы78100

19 окт, 12:03 #248 #1078100

>>1078098
Более того, по смыслу многое скорее всего не нужно заменять на long long int. Нужно программу всю перечитывать 100%, на будущее урок будет для типов делать тайпдефы.

Ответы7811078151

19 окт, 12:22 #249 #1078110

>>1078100
>для типов делать тайпдефы.
Никакие тайпдефы делать не надо самому. Ибо есть уже все тайпдефы которые нужны.
#include <stdint.h>

А заменять int на long long int это как с одного непортабельного костыля переваливатсья на другой.
Юзай int64_t / least / fast и т.д.
А с голыми интами наебешься, если будешь портировать куда-то даже на другой компилятор.

Ответы78112

19 окт, 12:31 #250 #1078112

>>1078110
Типичный случай с интом: у тебя больше 2^16 элементов для индексов или меньше? Если больше, то тебе нужен 32-битный инт (если у тебя индекс инт), если меньше, то 64-битный.
Откуда стандартной библиотеке в принципе знать, сколько у тебя может быть элементов? libastral.so включили в стандартную поставку?
Никаких тайпдефов не надо ему.

Ответы781167812778151

19 окт, 12:35 #251 #1078116

>>1078112
>Если больше, то тебе нужен 32-битный инт (если у тебя индекс инт), если меньше, то 64-битный.
Ну, то есть, наоборот.

19 окт, 12:51 #252 #1078127

>>1078112
Если может быть больше, то используй uint64_t или uint64_fast_t, в чем проблема-то? Но больше 32х бит для индексов это надо придумать еще где такое использоватсья может. Если только ты большие ( больше 4 гб ) файлы читаешь в память, или для оффсета к тем же файлам. Больше то врпинципе такие индексы не нужны.
Вообще для индексов есть специальный тайпдеф - size_t. На 32х битной платформе ты все равн оне сможешь адресовать больше 4гб памяти, а на 64х битной он 64х битный.

Ответы78129

19 окт, 12:56 #253 #1078129

>>1078127
Я-то причём? Я использую. В зависимости от версии программы или uint32_t или uint64_t. Но в любом случае тип индексов должен задаваться typedef'ом, выйти за 4 гб бывает не легко, а очень легко.
size_t для этого не годится, может быть сильно длиннее, чем нужно.

Ответы7814778151

19 окт, 12:58 #254 #1078131

>>1078067
Школьник плес. Учи уже С++1* а не си с классами.

Ответы78147

19 окт, 13:02 #255 #1078134

Попробовал CLion и понял, какая же это параша. Несмотря на то, что VS написана на C#, она работает в разы быстрее, чем это джава поделие. Даже аналог IntelliSense сделан настолько всрато, что для простой подсказки переменной в очень маленьком проекте (меньше 300 строк) требуется около 1-2 секунд.

Ответы78147

19 окт, 13:17 #256 #1078147

>>1078129
Ну выйти за 4 гб памяти я хз, что ты там пишешь. Если какие то сервера на которых по 128 гб оперативы, то там полюбому 64х битная архитектура и size_t будет соотвутствующий, если же сомневаешься можешь использовать uint64_t.
Но если твое приложение нацеленно поддерживать и 32х битные и 64х битные архитектуры, то тут сам подход изначально должен быть другим, и на 32х битной архитектуре выйти за передлы даже 3х гб памяти это уже катастрофа, ибо остальное будет занято ОС, и твоя программа начнет свопаться на диск, а если свопа нет, то это либо тотальное зависание системы, если она не кильне твой процесс, либо аварийный выход из-за невозможности аллокейта памяти.
Но опять же если тебе нужны уверенно 64х битные индексы, то никт оне запрещает тебе их использовать.

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

>>1078134
А вот это ты зря. CLion самая адекватная IDE по всем параметрам, если бы она еще кроме CMake поддерживала бы autotools и make было бы вообще идеально.
Конечно там еще по мелочи некоторых фич полезных нету, типа встроенного дизасемблера бинарников и отладчик там деревянный, но я им не пользуюсь обычно, отлаживаю на дебаг логах, а если прям совсем нужно использую gdb из консоли.
Но про тормоза, ты гонишь, у тебя комп наверное деревянный.
У меня Clion вообще никогда не тормозит, не подвисает и время отклика моментальное. Даже в больших проектах.
Студии нету, ибо я не дебил, чтоб писать на С/С++ под винду.

Ответы7815178284

19 окт, 13:32 #257 #1078151

>>1078147
Ты упорно даёшь мне бесполезные советы, которых я не просил. Пожалуйста, будь внимательнее. Не думал заглянуть к психотерапевту? Добра тебе.
>>1078064>>1078100>>1078112>>1078129-кум

19 окт, 13:35 #258 #1078154

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

Ответы7827578286

19 окт, 17:11 #259 #1078275

>>1078154
У опенсоса могут быть:
- почта
- мэйлинг лист
- ищью трекер
Что-нибудь одно из этого у разрабов есть.

Ответы78278

19 окт, 17:29 #260 #1078278

>>1078275
>ищью трекер
Ору с этого engrisha

Ответы78370

19 окт, 17:53 #261 #1078284

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

Ответы78297

19 окт, 17:56 #262 #1078286

>>1078154
Твою библиотеку лет 10 как не поддерживают, пиши свою.

19 окт, 18:18 #263 #1078297

>>1078284
>Это один из самых читаемых примеров кода в треде
Ты скозал?

> каждая строчка четко выражает замысел
Каждая строчка вызывает боль и недоумение.
Дай дураку лямбды, так они всю программу в одной функции захуярят.
Нахуя вообще функции использовать? Если можно прост окопипастнуть 2 одинаковых действия, как ты сделал с принтами, обернув каждую в еще в скоп.
Нахуя одинаковые вычисления выносить в отдельные перменные, легче же просто копипастнуть их в одну строчку.

Алсо, ты жестко проебался c i <= CONFIG_THREAD_COUNT, у тебя создается всегда на 1 тред больше чем указано в конфиге. Алсо, слово count тут не уместно, ибо обозначает счет, а не количество.

На счет производительности, думаю что умный С++11 делает mfence после каждого измениния атомарной переменной. Хотя не уверен, но ты можешь запостить дизассемблер и мы разберемся.
Но вообще, компилятору намного сложнее оптимизировать такие конструкции с кучей лямбд и всякой хуйни. Можешь посмотреть доклады разработчиков clang для достоверности.

Ответы782997830178594

19 окт, 18:24 #264 #1078299

>>1078297
>Алсо, ты жестко проебался
Это не мой код, с тобой другой анон говорит.
>Хотя не уверен, но ты можешь запостить дизассемблер и мы разберемся.
Нет, дорогой, это ты утверждал про производительность, ты и доказывай.

Ответы78536

19 окт, 18:27 #265 #1078301

>>1078297
> думаю что умный С++11 делает mfence после каждого измениния атомарной переменной
`sum += acc` это просто `lock xadd`

Ответы78536

10 Кб, 796x177

19 окт, 19:41 #266 #1078366

Сап, плюсач. Как сделать так, чтобы вместо пикрил вектор отображался по-нормальному (как массив)
VS2015

Ответы7840278669

19 окт, 19:53 #267 #1078370

>>1078278
https://www.ldoceonline.com/dictionary/issue
Сасай.

19 окт, 20:03 #268 #1078379

Аноны, мне нужна книга/серия туториалов по с++, но не просто что-то типа "вот это целочисленный тип int, а это логический bool" а нормальный гайд по языку с нормальной структурой и не обязательно хорошим описанием я могу сам загуглить некоторые вещи, к примеру я не совсем понимаю разницу между: const T&, T&, T, T&& и T*, так же какой-то маг в своём коде написал while(1), что ввело меня в ступор из-за неявного преобразования. Проблема поиска конкретных вещей в том, что я могу пропустить какую-нибудь фичу языка и в итоге сделать неоптимизировано/дикий костыль-велосипед за который меня найдут и жестоко покарают.

46 Кб, 1013x341

19 окт, 20:30 #269 #1078402

>>1078366
VS 2017, все хорошо

Ответы78669

131 Кб, 1920x1080

19 окт, 22:53 #270 #1078536

>>1075352
>>1077895
>>1078299
>>1078301
ВНИМАНИЕ ВСЕМ!
ПОКАЗЫВАЮ КАК ПРАВИЛЬНО ПИСАТЬ НА С++11.

https://pastebin.com/ErqiRZJW

В этой работе, я хотел показать элегантность и мощность нового стандарта С++11.
Мне бы очень хотелось, чтобы в мире было больше С++11.
Люди должны мыслить абстракциями и метаобъектами.
Моя работа это вызов общественности, люди должны понять, что они заблуждаются если не пишут на С++11...

Всем спасибо.

Ответы78538785447855179562

19 окт, 23:01 #271 #1078538

>>1078536
Пост-ирония.

19 окт, 23:09 #272 #1078544

>>1078536
too fat

19 окт, 23:19 #273 #1078551

>>1078536
А где unique_ptr для уникальных значений? Где move? Где аллокаторы в фактори функциях? Где в конце концов abstract number factory? Где typename перед каждым T? Где decay->decltype для всех вызываемых функций, неба, аллаха? Почему +1 , = 0 не заменены локальными неймспейсами с интегральными ( enterprise::super_smart_integer_enough_for_everything) константами?

Ответы78556

19 окт, 23:33 #274 #1078556

>>1078551
Да ты прав, там явно нехватает С++11. Могу создать репу на гитхабе и будем туда пул реквесты делать, улучшая и совершенсвуюя стиль С++11.

Ответы78584

20 окт, 00:19 #275 #1078584

>>1078556
В общем, я запилил репозиторий на гитхабе, кто хочет поговнокодить на самом деле без говнокода на С++11 и т.п. присоеденяйтесь.

https://github.com/CppDvachAnon/CPP11/tree/abstract_number

20 окт, 00:49 #276 #1078594

>>1078297
>Ты скозал?
не, другой анонче

>Дай дураку лямбды, так они всю программу в одной функции захуярят.
why not? особенно если вся программа помещается на один экран.

>Нахуя вообще функции использовать? Если можно прост окопипастнуть 2 одинаковых действия
в лямбду вынести? копипаста копипасте рознь.

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

>ты жестко проебался c i <= CONFIG_THREAD_COUNT
найди второе место, где я жестоко проебался и получи пирожок

>делает mfence после каждого измениния атомарной переменной
один анонче уже отписал насчет lock xadd, и он прав

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

20 окт, 02:06 #277 #1078618

вчерашний jni страдалец возвращается
пытаюсь инвочить jvm - падает с sigsegv
это какойта адъ, ну и я конечно молодец
код сего непотребства прилагаю
h: https://pastebin.com/FWaDiFQN
cpp: https://pastebin.com/aShk60S7
выхлоп консоли: https://pastebin.com/1tunNQLA

собственно main
int main() {
jni::WrapperJNI wrapper;
wrapper.Init();
return 0;
}

не бейте
и обратите внимание внизу консольного выхода пишет радостное
JVM load succeeded: Version
танкеры чаю, тому кто пояснит за это дерьмо

Ответы78619786217872078726

20 окт, 02:07 #278 #1078619

>>1078618
могу ещё дамп памяти приложить
как породник к своему подгорающему пердаку

20 окт, 02:45 #279 #1078621

>>1078618
кажется понял что лажаю с unique_ptr, но это не точно

Ответы78626

187 Кб, 1920x1080

20 окт, 02:52 #280 #1078626

>>1078621
итак, оно вроде пусканулось, но в конце случилось веселье
самое время лажать в с++11 когда уже с++17

Ответы786937872278723

20 окт, 08:16 #281 #1078669

>>1078402
Спасибо за помощь, блять
>>1078366
Решил путем "починки" установщиком студии

20 окт, 10:14 #282 #1078693

>>1078626
> оно вроде пусканулось,
С тем же кодом или ты что-то уже поменял? Сделай помощь тебе более простой.

20 окт, 12:06 #283 #1078720

>>1078618
> std::unique_ptr<JavaVMOption[]> options(new JavaVMOption[4]);
> options[4].optionString = const_cast<char >("-verbose:jni");
Пиздец.

> const_cast<char >
> const_cast<char >
> const_cast<char >
> const_cast<char >
> const_cast<char >
Пиздец⁵

Но круче всего — это использование unique_ptr и методы Init() + Release() при наличии нормального управления ресурсами в языке.

Ответы78757

20 окт, 12:10 #284 #1078722

>>1078626
Посмотри, что у тебя лежит в твоих unique_ptr, прежде чем методы у хранящихся там указателей дёргать.

Ответы78757

6 Кб, 629x22

20 окт, 12:19 #285 #1078723

>>1078626
А зачем ты пиздишь? Это я found the solution, а не ты.

20 окт, 12:26 #286 #1078726

>>1078618
К нам в айти отдел пришёл новый сотрудник. Нужно сказать, что у нас в отделе работают почтенные крестогоспода. Новичка посадили за компьютер, но не успели даже дать задание, как он начал кодить. Начальник из любопытства подошёл посмотреть, что он там написал. В течении секунд тридцати он побледнел, затем посинел, затем покраснел, а потом трясущимся от нескрываемого гнева голосом сказал:
- Это же Абстрактная фабрика! На чём ты кодил до этого?
- На Джаве.
- Жабапидор! - в один голос заорали все 20 человек.
- Жабапидор! Жабапидор! Жабапидор!
Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать джавапидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев:
- Жабапидор!
В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох джавапидор даже дело заводить не стали.

20 окт, 12:26 #286 #1078726

>>1078618
К нам в айти отдел пришёл новый сотрудник. Нужно сказать, что у нас в отделе работают почтенные крестогоспода. Новичка посадили за компьютер, но не успели даже дать задание, как он начал кодить. Начальник из любопытства подошёл посмотреть, что он там написал. В течении секунд тридцати он побледнел, затем посинел, затем покраснел, а потом трясущимся от нескрываемого гнева голосом сказал:
- Это же Абстрактная фабрика! На чём ты кодил до этого?
- На Джаве.
- Жабапидор! - в один голос заорали все 20 человек.
- Жабапидор! Жабапидор! Жабапидор!
Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать джавапидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев:
- Жабапидор!
В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох джавапидор даже дело заводить не стали.

Показать весь текст
Ответы787617883278860

20 окт, 13:33 #287 #1078749

Двач, я не могу понять, что за перегрузку ввели в C++14 для функции find у классов set/multiset? Может кто подсказать?
>template<class K> iterator find(const K& x);

Ответы78752

20 окт, 13:37 #288 #1078752

>>1078749
http://en.cppreference.com/w/cpp/container/map/find

Ответы78753

20 окт, 13:42 #289 #1078753

>>1078752
Молодец, гуглить умеешь, в программировании это тебе поможет.

Ответы78754

20 окт, 13:45 #290 #1078754

>>1078753
>гуглить умеешь
А ещё умею читать на английском.

20 окт, 13:49 #291 #1078757

>>1078722
yep, именно там и была проблема, догадался
но всё равно спасибо
>>1078720
таки такое тз
плюс метод DeleteJavaVM делает именно то что и сказано
поэтому у unique_ptr начинаются месяки на вызове деструктера

Ответы78760

20 окт, 13:50 #292 #1078760

>>1078757
unique_ptr можно передавать custom deleter.

20 окт, 13:52 #293 #1078761

>>1078726
>- На Джаве.
>- Жабапидор! - в один голос заорали все 20 человек.
Ещё на котлине :)
Но я не виноват, что у тех с кем мы работаем код на жабе
Сказали запилить плюсы - пилю
причем у них жаба вызывает плюсы через jni ирония

Ответы78770

20 окт, 14:49 #294 #1078770

>>1078761
А тебе нужно просто код с плюсов запусть в жава проекте?
Я просто не пойму, почему ты кресты в dll какую нибудь не засунешь, а из java просто dll функции вызывать? Или в жаве нельзя обращаться к dll? Или у нас не шиндовс?

Ответы78894

20 окт, 16:52 #295 #1078832

>>1078726
>За получасовой обед его изнасиловали несколько человек.
Я так ненавижу пидорасов, что хочу выебать их!

20 окт, 18:18 #296 #1078860

>>1078726
Про абстрактную фабрику не понял, это как-то связано с джавой?

Ответы78861

20 окт, 18:20 #297 #1078861

>>1078860
Тем, что ЖАВА ООП ПАТТЕРНЫ КУКАРЕКУ НУЖНО БОЛЬШЕ ФАБРИК, БОЛЬШЕ ИНТЕРФЕЙСОВ ПО ИНТЕРФЕЙСУ НА КАЖДОЕ ПОЛЕ

Ответы78862

20 окт, 18:23 #298 #1078862

>>1078861
Требую дополнительных пояснений, я тут наоборот пытаюсь въезжать в паттерны, даже книгу на днях купил и позавчера как-раз пытался учить эту фабрику но забил всё-равно, скучно, что с паттернами и уж тем-более ООП не так? Мы же на C++ а не на C.

Ответы7886378883

20 окт, 18:24 #299 #1078863

>>1078862
С паттернами всё отлично. Плохо то, что жава рабы их суют в каждую дыру не понимаю для чего какой паттерн нужен.

20 окт, 18:59 #300 #1078883

>>1078862
Слушай, добрый совет тебе, выброси нахуй эту гнигу, а лучше вообще сожги, чтоб другие не прочитали.
ООП патерны в С++ почти никогда не нужны, если ты не пишешь говно типа как на яве. Я сам прочитал несколько гниг gof и т.п про это говно и мне ниразу эта параша не пригодилась на работе и никто из нормальных людей это не использует.

20 окт, 19:08 #301 #1078894

>>1078770
Мне нужно из плюсов вызывать жаба код, вот в чем подвох.
Просто я знаю что этот жава код в итоге вызывает плюсы.
инсайдерская инфа 146%
Можете даже попробовать угадать сферу деятельности)

Ответы78933

20 окт, 19:50 #302 #1078933

>>1078894
>Можете даже попробовать угадать сферу деятельности
Разработка под андроид.

Ответы78939

20 окт, 19:57 #303 #1078939

>>1078933
Не нихуя)

20 окт, 23:03 #304 #1079049

Аноны, я лютейший ньюфаг, работаю погромистом на питоне и вообще не понимаю, как работает рантайм. То есть, если я захочу покласть в переменную строку с названием класса, а потом "создать" из этой строки объект - у меня это не получится?

Ответы7906279223

20 окт, 23:20 #305 #1079062

>>1079049
Нет.

Ответы79068

20 окт, 23:30 #306 #1079068

>>1079062
А почему? Объясни, пожалуйста, если не хочешь или сложно, скажи: в книжке Липпмана это будет разбираться? Я только начал просто. Если не будет - скинь что-нибудь про работу компилятора (в очень общих чертах), разумеется, если несложно.

Ответы79136

21 окт, 07:36 #307 #1079136

>>1079068
Имена типов хранятся, но они... Сложные. Можно вытащить из типа строку типа такой (это std::string)
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Они сложные из-за того, что используется метапрограммироване и классы генерятся во время компиляции.
> скинь что-нибудь про работу компилятора (в очень общих чертах)
Очень тяжело рассказать про работку компилятора в очень общих чертах. Советую начать с первой ссылки в гугле по запросу how c++ compiler works
Советую забить на плюсы, они очень сложные, а профита тебе с них никакого не будет

Ответы79164

21 окт, 10:32 #308 #1079164

>>1079136
Почему стоит забить?

Ответы79174

21 окт, 11:27 #309 #1079174

>>1079164
>Почему стоит забить?
>они очень сложные, а профита тебе с них никакого не будет
А по поводу сабжа
>если я захочу покласть в переменную строку с названием класса, а потом "создать" из этой строки объект - у меня это не получится?
То что ты описал. Так работает dll. Только вызываются функции. С помощью dll непосредственно получить объект созданный в этом самой dll получить достаточно сложно. И насколько я понимаю тут уже зависит от платформы. Если бы не пайтон, а какой нибудь .net язык и шиндовс, то можно было бы Invoke использовать или тот же COM

21 окт, 11:48 #310 #1079179

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

Ответы79185

21 окт, 11:59 #311 #1079185

>>1079179
https://stackoverflow.com/questions/4295432/typedef-function-pointer
Не забудь прокрутить вниз до std::function

21 окт, 13:23 #312 #1079223

>>1079049
>То есть, если я захочу покласть в переменную строку с названием класса, а потом "создать" из этой строки объект - у меня это не получится?
Если очень сильно приспичит, и ты готов использовать нестандартные расширения языка - это в целом возможно, только ты просираешь статическую типизацию (один из важнейших инструментов программирования на плюсах).

21 окт, 20:53 #313 #1079500

82 Кб, 1344x706

84 Кб, 1367x706

Почему так происходит? Кто знает? интрэсно

Ответы79520795227952479532

21 окт, 21:12 #314 #1079520

>>1079500
Перегрузка функции operator<<().
Во втором случае печатается значение указателя (адрес в памяти).

21 окт, 21:15 #315 #1079522

>>1079500
Попробуй p явно преобразовать к char*
Там какая-то проблема с самим cout

http://www.learncpp.com/cpp-tutorial/613-void-pointers/

21 окт, 21:17 #316 #1079524

>>1079500
Что по-твоему должен делать оператор вывода, видя перед собой указатель на void? Как он по-твоему должен догадаться о том, что там строка/число/структура?

21 окт, 21:35 #317 #1079532

>>1079500
Какой же С++ уебищный язык господи. Нет ничего лучше старого добротного FORTRAN.

Ответы79543

21 окт, 21:40 #318 #1079543

>>1079532
Ну у него там как раз С. От крестов там только поток вывода

21 окт, 21:54 #319 #1079562

>>1078536
>С++11
>19/10/17

21 окт, 21:58 #320 #1079566

Почему не получается прилепить к std::filesystem::path дополнительный путь, получаемый через std::string_view, при помощи operator/()? string прилепляется нормально можно конечно string(string_view), но емана, мои лишние аллокации!!!

Ответы79584

4 Кб, 489x77

21 окт, 21:59 #321 #1079568

Лаба по С++.
Аноны,проверьте пожалуйста,все ли сделал так.
Задание:
Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры.
Пик.
Решение:
#include <iostream>
#include <math.h>
using namespace std;
int main(){
double s=0,y=0,n,ex,x,min,max,h,exx;
cout<<"Vvedite n"<<endl;
cin>>n;
cout<<"Vvedite min"<<endl;
cin>>min;
cout<<"Vvedite max"<<endl;
cin>>max;
cout<<"Vvedite shag"<<endl;
cin>>h;
for (int k=0,x=min; k<=n,x<=max; k++, x+=h){
exx=2k+1;
ex=(exx-1)exx;
if (k==0) ex=1;
s=pow(-1,k)pow(x,(2k+1))/ex;
y=sin(x);
cout<<"k = "<<k<<" , S(x) = "<<s<<" ,Y(x)= "<<y<<" ,|Y(x)-S(x)|= "<<fabs(y-s)<<endl;
}
system("pause");
}

4 Кб, 489x77

21 окт, 21:59 #321 #1079568

Лаба по С++.
Аноны,проверьте пожалуйста,все ли сделал так.
Задание:
Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры.
Пик.
Решение:
#include <iostream>
#include <math.h>
using namespace std;
int main(){
double s=0,y=0,n,ex,x,min,max,h,exx;
cout<<"Vvedite n"<<endl;
cin>>n;
cout<<"Vvedite min"<<endl;
cin>>min;
cout<<"Vvedite max"<<endl;
cin>>max;
cout<<"Vvedite shag"<<endl;
cin>>h;
for (int k=0,x=min; k<=n,x<=max; k++, x+=h){
exx=2k+1;
ex=(exx-1)exx;
if (k==0) ex=1;
s=pow(-1,k)pow(x,(2k+1))/ex;
y=sin(x);
cout<<"k = "<<k<<" , S(x) = "<<s<<" ,Y(x)= "<<y<<" ,|Y(x)-S(x)|= "<<fabs(y-s)<<endl;
}
system("pause");
}

Показать весь текст
Ответы795727957479577

21 окт, 22:02 #322 #1079572

>>1079568
Все правильно, сдавай.

21 окт, 22:03 #323 #1079574

>>1079568
Залей на https://ideone.com/
Разметка сожрала знаки умножения. Но выглядит вроде правильно

21 окт, 22:05 #324 #1079577

>>1079568
>"Vvedite shag"
Проиграл с этого в голос.
Уже не первый раз замечаю у студентиков с лабами такую хуйню на транслите.
Вас блять что английскому не учат в ваших ПТУ? Этож пиздец, какой-то.
Покажи такой код кому-нибудь в реальной жизни вне лабы, люди же охуеют просто и засмеют сразу.
Пиздец неужели трудно выучить блять хотя бы элементарный уровень языка, чтобы придерживатсья правил установленных в мировом сообществе программирования?

Ответы79581795837958679589

21 окт, 22:08 #325 #1079581

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

Ответы79594

21 окт, 22:09 #326 #1079583

>>1079577
У некоторых вообще заставляют кириллицей писать в виндовую консольку.

Ответы79587

21 окт, 22:10 #327 #1079584

>>1079566
Наверное - из-за отсутствия нужной перегрузки в языке.

Ответы79588

21 окт, 22:11 #328 #1079586

>>1079577
Да тут дело ещё хуже. Предположим нужно сделать на русском. Но дело в том, что он не потрудился сделать LC_ALL и писать на русском. А начал городить транслит. У нас тут 2017 как бы utf уже стандарт. Транслин ненужен

Ответы79594

9 Кб, 740x237

21 окт, 22:11 #329 #1079587

>>1079583
А шо не так?

Ответы79590

21 окт, 22:12 #330 #1079588

>>1079584
В том то и дело, что её почему-то нету во всяком случае в спермо стд. При чем есть бумажка 2016 года, направленная наверное в комитет, не уверен, в которой запрашивается эта фича.

Ответы79702

21 окт, 22:12 #331 #1079589

>>1079577
Лол.
Мой препод - тетка лет 70.
Она говорит инклюд матч,микрософт и лабалаторная.

21 окт, 22:13 #332 #1079590

>>1079587
А если кодировка файла не виндовая 12четатам, а человеческий utf-8?

Ответы79592

83 Кб, 205x193

21 окт, 22:14 #333 #1079592

>>1079590
А тебя ебет какая у меня кодировка, свинопитек?

Ответы79601

21 окт, 22:15 #334 #1079594

>>1079581
Если препод не знает английского и преподает С++, то можно смело нахуй слать такого долбоеба ибо ничему хорошму он не может научить хотя бы ввиду того, что 99% знаний о программирование находится в англоязычном формате.

>>1079586
А че LC_ALL то? Может хотя бы LC_LANG? Но в общем, даже если он укажет LC_ALL=ru_RU.UTF-8 то не факт что в системе будет установленна эта локаль. А инглишь поддерживает все, и тут 100% не проебешься.

Ответы79603

21 окт, 22:17 #335 #1079601

>>1079592
Ебет, если твоя пораша запустится на моей консольке, с другой кодировкой.

Ответы79604

21 окт, 22:18 #336 #1079603

>>1079594
>Если препод преподает С++
Не преподает. Там максимум сишечка и винапи.

Ответы7960979798

21 окт, 22:18 #337 #1079604

>>1079601
С чего ты взял, говноглот, что кто-то разрешит тебе запускать мои клевые программы, да еще и из под прыщеговна?

Ответы79608

21 окт, 22:20 #338 #1079608

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

Ответы79611

21 окт, 22:20 #339 #1079609

>>1079603
>Там максимум сишечка и винапи
Я тебе по секрету расскажу. Но расшарить winAPI не так и просто на нормальном уровне конечно же. Тем более winAPI оперирует уже с таким понятие как операционная система. И там уже нужно знать как оно работает и как там всё описывается.

Ответы79613

21 окт, 22:22 #340 #1079611

>>1079608
>"Не спермоглотам не запускать".
Если там будет такой комментарий, тебе будет можно запускать.

Ответы79615

21 окт, 22:22 #341 #1079613

>>1079609
Я говорил про то, что кресты не преподают.
А чего сложного в винапи? Появилась задача, гугли пример, уточняй что в нем происходит на msdn, перепиливай под свою задачу.

Ответы79616

21 окт, 22:23 #342 #1079615

>>1079611
Нет, я же не спермоглот.

Ответы79617

21 окт, 22:23 #343 #1079616

>>1079613
С таким успехом ничего сложного и в крестах нету

Ответы79619

21 окт, 22:23 #344 #1079617

>>1079615
Докажи, что не спермоглот. Возьми в рот сперму и не глотай.

Ответы79621

21 окт, 22:24 #345 #1079619

>>1079616
Так и есть.

21 окт, 22:24 #346 #1079621

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

Ответы79625

21 окт, 22:27 #347 #1079625

>>1079621
А как ты узнаешь, что тебе не захочется проглотить сперму?

Ответы7963579722

21 окт, 22:31 #348 #1079635

>>1079625
А к чему этот признак? По определению "спермоглот" занимается глотанием спермы, а не раздумьями "захочется или нет". Если не набирать её в рот, то и проглотить не получится. мы же взрослые крестовики, и не будем заниматься грязными хаками, в виде заливания спермы через нос?

Ответы79722

21 окт, 23:56 #349 #1079702

>>1079588
http://en.cppreference.com/w/cpp/filesystem/path/append
http://en.cppreference.com/w/cpp/filesystem/path/path
Собственно, если у тебя прилепляется string, то у тебя вызывается конструктор path, а для конструктора есть нужная перегрузка. Выкладывай код, что-то здесь нечисто.

Ответы79869

22 окт, 00:46 #350 #1079722

>>1079625
>>1079635
у кого что болит - тот о том и говорит. Вы оба спермоглота.

22 окт, 03:27 #351 #1079754

Сап, посаны. Подскажите пожалуйста, как получить Base64 из .png картинки? Или уж на то пошло, из любого бинарного файла.

Ответы79871

22 окт, 08:43 #352 #1079798

>>1079603
У нас (в 2012) один препод пытался преподавать плюсы. Начал писать код на доске и обосрался. Объяснить я ему не смог, он ушёл в полную несознанку. Я к нему на пары больше не ходил.

294 Кб, 1907x867

22 окт, 09:53 #353 #1079813

Почему рандом на столько рандомный ?

Ответы79815798357998680051

22 окт, 10:04 #354 #1079815

>>1079813
Используется одинаковый сид, чтобы он был разным, надо его инициализировать, например, временем.
Вся суть курсохуесосов, что с вас взять. Шёл бы да книжку почитал.

22 окт, 10:51 #355 #1079832

Сап, аноны. До недавнего времени я кодил прошивки для всяких кортекс-М3 на C, но, в связи с тем, что один из мною любимых компиляторов (нет, не gcc), начал поддерживать С++14, я решил вкатиться. Вкатываться решил методом написания периферийной библиотечки, суть которой такова:
Есть модуль периферии/несколько идентичных модулей, к которому/которым относятся некие конфигурационные регистры, битовые поля в которых отвечают за некие настройки. Библиотека должна обеспечивать методы, модифицирующие эти поля, обеспечивая при этом максимальную защиту от дебила, сидящего за монитором, проверяя на этапе компиляции передаваемые параметры.
Делать это в рантайме, как в сишных библиотеках, поставляемых производителями, уныло и тупо.
В результате, пока что пришел к такому варианту:
Модули периферии объявляются как шаблоны классов с заблокированными конструкторами и статическими методами. Внутри класса объявляются enum class-ы, содержащие возможные значения битовых полей. Для модификации регистров объявляется шаблон метода, который проверяет static_assert-ом тип переданного enum-а, ну а затем делает нужные манипуляции. Вот в таком виде:

namespace VE4 {
////////////////////////////////////////////////////////////////////////////
/// Список портов GPIO
enum class Gpios : uint32_t {
GpioA = 0x40080000,
GpioB = 0x40088000,
GpioC = 0x40090000
};
////////////////////////////////////////////////////////////////////////////
/// Шаблон порта GPIO
template <const Gpios port>
class Gpio {
public:
// Запись/чтение напрямую
static uint16_t Get() {
return base->RXTX;
}
static void Set(const uint16_t d) {
base->RXTX = d;
}
protected:
Gpio();
// Структура управляющих регистров
typedef struct {
uint32_t RXTX;
uint32_t OE;
uint32_t FUNC;
uint32_t ANALOG;
uint32_t PULL;
uint32_t PD;
uint32_t PWR;
uint32_t GFEN;
} Regs;
// И указатель на нее
static constexpr Regs base = (Regs)port;
};
////////////////////////////////////////////////////////////////////////////
/// Шаблон отдельного пина
template <const Gpios port, const uint32_t pin>
class Pin : public Gpio<port> {
public:
// enum-ы с битовыми масками
enum class Direction : uint32_t {
Input = 0,
Output = 1,
MASK = 1 // для сброса поля
};
enum class Function : uint32_t {
GPIO = 0,
Main = 1,
Alternate = 2,
Remapped = 3,
MASK = 3
};
// Чтение/запись
static bool Get() {
return _gpio::base->RXTX && setmsk;
}
static void Set(bool b) {
if (b) _gpio::base->RXTX | setmsk;
else _gpio::base->RXTX & clrmsk;
}
// Конфигурация
template <typename T>
static void Config(T cfg) {
// Проверка передаваемых enum-ов static_assert-ом
APPLICABLE_TYPES(Direction,
Function);
if (ChkType<T, Direction>()) { ModBits<T, pin>(cfg, _gpio::base->OE); } // Модификация бит в регистре по маске и смещению маски
if (ChkType<T, Function>()) { ModBits<T, pin>(cfg, _gpio::base->FUNC); } // Да, нужно в макрос обернуть
}
protected:
Pin();
private:
static constexpr uint32_t setmsk = 0x01u << pin;
static constexpr uint32_t clrmsk = ~setmsk;
using _gpio = Gpio<port>;
};
}

В результате получается, можно писать так:
void f() {
using PA1 = VE4::Pin<VE4::Gpios::GpioA, 1>;
PA1.Config<PA1::Direction>(PA1::Direction::Output);
}

В связи с этим хочу узнать мнение анонов, правилен ли такой подход?

22 окт, 10:51 #355 #1079832

Сап, аноны. До недавнего времени я кодил прошивки для всяких кортекс-М3 на C, но, в связи с тем, что один из мною любимых компиляторов (нет, не gcc), начал поддерживать С++14, я решил вкатиться. Вкатываться решил методом написания периферийной библиотечки, суть которой такова:
Есть модуль периферии/несколько идентичных модулей, к которому/которым относятся некие конфигурационные регистры, битовые поля в которых отвечают за некие настройки. Библиотека должна обеспечивать методы, модифицирующие эти поля, обеспечивая при этом максимальную защиту от дебила, сидящего за монитором, проверяя на этапе компиляции передаваемые параметры.
Делать это в рантайме, как в сишных библиотеках, поставляемых производителями, уныло и тупо.
В результате, пока что пришел к такому варианту:
Модули периферии объявляются как шаблоны классов с заблокированными конструкторами и статическими методами. Внутри класса объявляются enum class-ы, содержащие возможные значения битовых полей. Для модификации регистров объявляется шаблон метода, который проверяет static_assert-ом тип переданного enum-а, ну а затем делает нужные манипуляции. Вот в таком виде:

namespace VE4 {
////////////////////////////////////////////////////////////////////////////
/// Список портов GPIO
enum class Gpios : uint32_t {
GpioA = 0x40080000,
GpioB = 0x40088000,
GpioC = 0x40090000
};
////////////////////////////////////////////////////////////////////////////
/// Шаблон порта GPIO
template <const Gpios port>
class Gpio {
public:
// Запись/чтение напрямую
static uint16_t Get() {
return base->RXTX;
}
static void Set(const uint16_t d) {
base->RXTX = d;
}
protected:
Gpio();
// Структура управляющих регистров
typedef struct {
uint32_t RXTX;
uint32_t OE;
uint32_t FUNC;
uint32_t ANALOG;
uint32_t PULL;
uint32_t PD;
uint32_t PWR;
uint32_t GFEN;
} Regs;
// И указатель на нее
static constexpr Regs base = (Regs)port;
};
////////////////////////////////////////////////////////////////////////////
/// Шаблон отдельного пина
template <const Gpios port, const uint32_t pin>
class Pin : public Gpio<port> {
public:
// enum-ы с битовыми масками
enum class Direction : uint32_t {
Input = 0,
Output = 1,
MASK = 1 // для сброса поля
};
enum class Function : uint32_t {
GPIO = 0,
Main = 1,
Alternate = 2,
Remapped = 3,
MASK = 3
};
// Чтение/запись
static bool Get() {
return _gpio::base->RXTX && setmsk;
}
static void Set(bool b) {
if (b) _gpio::base->RXTX | setmsk;
else _gpio::base->RXTX & clrmsk;
}
// Конфигурация
template <typename T>
static void Config(T cfg) {
// Проверка передаваемых enum-ов static_assert-ом
APPLICABLE_TYPES(Direction,
Function);
if (ChkType<T, Direction>()) { ModBits<T, pin>(cfg, _gpio::base->OE); } // Модификация бит в регистре по маске и смещению маски
if (ChkType<T, Function>()) { ModBits<T, pin>(cfg, _gpio::base->FUNC); } // Да, нужно в макрос обернуть
}
protected:
Pin();
private:
static constexpr uint32_t setmsk = 0x01u << pin;
static constexpr uint32_t clrmsk = ~setmsk;
using _gpio = Gpio<port>;
};
}

В результате получается, можно писать так:
void f() {
using PA1 = VE4::Pin<VE4::Gpios::GpioA, 1>;
PA1.Config<PA1::Direction>(PA1::Direction::Output);
}

В связи с этим хочу узнать мнение анонов, правилен ли такой подход?

Показать весь текст
Ответы7983880106

22 окт, 11:00 #356 #1079835

>>1079813
Ты на крестах пишешь. Гспд. Ну ты хотя бы попытался заглянуть в стандартную библиотеку
http://www.cplusplus.com/reference/random/

22 окт, 11:06 #357 #1079838

>>1079832
Собственно где тут С++14?
Что значит правилен?
У тебя не код, а какое насилие шаблонов. И залей его куда нибудь. Читать невозможно.
Нахуя там namespace в начале? Чтобы точки потом можно было ставить?

Ответы7984379848

21 Кб, 500x370

22 окт, 11:15 #358 #1079843

>>1079838
>библиотека
>нахуй неймспейс?

22 окт, 11:20 #359 #1079848

>>1079838
1. using, constexpr, вот это вот все.
2. Ну есть же какие-то правила хорошего тона, разве нет?
3. Что не так с шаблонами? https://pastebin.com/F6zJyE5K, https://pastebin.com/MFw32PkR
4. Чтобы отделить библиотеку от всего остального.

Ответы79853

22 окт, 11:26 #360 #1079853

>>1079848
А. Пост твой не прочитал нормально.
Я наверное не могу оценивать. Но мне нравится код

22 окт, 11:55 #361 #1079869

>>1079702
#include <string_view>
#include <filesystem>
#include <fstream>
#include <iostream>

using namespace std;
namespace fs = experimental::filesystem;

fs::path data_path;
ifstream filestream;

fs::path FileSystemManager::GetDataPath()
{
return data_path;
}

FileSystemManager filesystem;

void openfile(string_view file_name)
{

//filestream = ifstream(filesystem.GetDataPath() / string(file_name)); // это работает
filestream = ifstream(filesystem.GetDataPath() / file_name); // это нет
if (!filestream)
{
//throw underflow_error;
return;
}
}

Как-то так

22 окт, 11:55 #361 #1079869

>>1079702
#include <string_view>
#include <filesystem>
#include <fstream>
#include <iostream>

using namespace std;
namespace fs = experimental::filesystem;

fs::path data_path;
ifstream filestream;

fs::path FileSystemManager::GetDataPath()
{
return data_path;
}

FileSystemManager filesystem;

void openfile(string_view file_name)
{

//filestream = ifstream(filesystem.GetDataPath() / string(file_name)); // это работает
filestream = ifstream(filesystem.GetDataPath() / file_name); // это нет
if (!filestream)
{
//throw underflow_error;
return;
}
}

Как-то так

Показать весь текст
Ответы7987079909

22 окт, 11:57 #362 #1079870

>>1079869
https://pastebin.com/74MNmW5Z

Ответы79877

22 окт, 12:00 #363 #1079871

>>1079754
https://ru.wikipedia.org/wiki/Base64
>Схема соответствия «символ — значение» в Base64
Читаешь побайтово из одного потока, прогоняешь его через энкодер, и выводишь в другой поток.

22 окт, 12:11 #364 #1079877

>>1079870
http://coliru.stacked-crooked.com/a/8256d1a5f54133f8
Ты про эту ошибку говоришь или про какую? ТЫ СВОЮ ОШИБКУ ЗАПОСТИШЬ БЛЯДЬ ИЛИ МНЕ НУЖНО КЛЕЩАМИ ТЕБЯ ЗА ЯЗЫК ТЯНУТЬ?

Ответы79960

22 окт, 12:26 #365 #1079881

Вопрос к экспертам, с помощью только либы SDL2 можно написать приметивный , но красивый GUI, (кнопки, радиокнопки, чекбоксы, формы для ввода, выбор файла)?

22 окт, 13:32 #366 #1079909

>>1079869
https://wandbox.org/permlink/86fIEMXB64zlcCR1

Ответы79985

22 окт, 15:24 #367 #1079960

>>1079877
filesystemmanager.cpp(73): error C2679: binary '/': no operator found which takes a right-hand operand of type 'std::string_view' (or there is no acceptable conversion)
\msvc\14.11.25503\include\filesystem(1500): note: could be 'std::experimental::filesystem::v1::path std::experimental::filesystem::v1::operator /(const std::experimental::filesystem::v1::path &,const std::experimental::filesystem::v1::path &)' [found using argument-dependent lookup]
filesystemmanager.cpp(73): note: while trying to match the argument list '(std::experimental::filesystem::v1::path, std::string_view)'

Ответы7998580609

22 окт, 16:01 #368 #1079985

>>1079960
>>1079909

Ответы80113

22 окт, 16:02 #369 #1079986

>>1079813
>Почему рандом на столько рандомный ?
>на столько
Потому что готовься к ОГЭ.

22 окт, 17:08 #370 #1080051

>>1079813
>> #include <conio.h>
>> #include <time.h>
Говноед плес. Ты зацем со своим Цэ в терд крестов пришел. Дали ему в крестах рандомы с настраиваемыми генераторами и распределениями, нет, блять, хотим парашу с цэ жрать.

Ответы8005280057

22 окт, 17:09 #371 #1080052

>>1080051
>Ты зацем со своим Цэ в терд крестов пришел.
кони-о это даже не Цэ

22 окт, 17:19 #372 #1080057

>>1080051
Только твоя параша из С++ работает в 1000 раз медленее обычного rand().

Ответы800648006580105

44 Кб, 678x242

22 окт, 17:23 #373 #1080064

>>1080057
> параша из С++ работает в 1000 раз медленее обычного rand().
Хули ты пиздишь?
https://stackoverflow.com/a/35359918

22 окт, 17:25 #374 #1080065

>>1080057
Даже если на 2 порядка, что не так. Но она хотя бы нормально работает.

22 окт, 18:43 #375 #1080105

>>1080057
Пруфы, неосилятор. Бенчмарки, ассемблерный код.

Ответы80112

22 окт, 18:45 #376 #1080106

>>1079832
Код не читал, подход правильный.

22 окт, 18:56 #377 #1080112

>>1080105
Ладно, не пожалел почаса и потратил на написание бенчмарка.
https://pastebin.com/tKPfDNY2

Вот тесты с моей тачки с core i5 4670k:

[Trace timer]: Clocks per second 3,385,997,176
C++ uniform distribution 10,000,000 runs
Total exec cycles: 719,350,631
Avg cycles/run : 71
C rand 10,000,000 runs
Total exec cycles: 310,099,258
Avg cycles/run : 31
RDRAND fair rand 10,000,000 runs
Total exec cycles: 2,856,603,050
Avg cycles/run : 285
RDRAND unfair rand 10,000,000 runs
Total exec cycles: 2,823,199,699
Avg cycles/run : 282

Надеюсь вы там разберетесь как это скомпилировать. Я в хедере написал флаги.

Ответы801148012380124

22 окт, 18:57 #378 #1080113

>>1079985
То есть у шланга все работает? Придется на время смириться с виндопроблемами.

22 окт, 18:58 #379 #1080114

>>1080112
Сорян вот тут версия с thousand seperators для читабельности
https://pastebin.com/KqAqR3Pf

22 окт, 19:04 #380 #1080123

>>1080112
Среднее время мало о чем говорит, надо гистограмму.

22 окт, 19:06 #381 #1080124

>>1080112
Эм. Может ты не будешь им диапазон задавать. Понятно что при нормализации будет медленно. Делай вот так
random_device rd;
mt19937 gen(rd());
gen(); <- возвращает рандомное число.

Ответы8013680149

22 окт, 19:44 #382 #1080136

>>1080124
Да так быстрее, вроде показывает 10 циклов avg, но там походу у меня баг с rdtsc, что-то циклы странно показывает. Сейчас нахожусь под виндой и компилирую mingw думаю может из-за этого.

Ответы80144

22 окт, 19:59 #383 #1080144

>>1080136
Я конечно не эксперт. Но зачем ты натыкал атрибутов, если не используешь gcc. И вообще зачем тебе эти атрибуты тут.
Или это копипаст с интеловской документации просто?

Ответы80155

22 окт, 20:08 #384 #1080149

>>1080124
> int rand_cpp(std::mt19937& gen) {
> return gen();
> }
C++ uniform distribution 10000000 runs
Total exec cycles: 140928009
Avg cycles/run : 14
C rand 10000000 runs
Total exec cycles: 468254179
Avg cycles/run : 46

Ответы8015180155

22 окт, 20:10 #385 #1080151

>>1080149
Так и какой вывод из этого можно сделать?

Ответы80153

22 окт, 20:14 #386 #1080153

>>1080151
Басни про скорость работы сишного генератора случайных чисел -- брехня?
Если честно, нет никакой разницы, 14 или 46, гораздо важнее качество распределения. Вот тут можно похоливарить. А заполнение кучей случайных чисел боттлнеком вряд ли станет, только если в монте-карло каком-нибудь очень гнойном.

Ответы80160

22 окт, 20:16 #387 #1080155

>>1080144
Атрибуты что бы не дать копилятору удалить код во время оптимизации.

>>1080149
Да ты прав mt работает побыстрее rand. Мне теперь интересно настолько быстрее будет работать свой Mersenne Twister генератор.

Ответы801578016280164

22 окт, 20:21 #388 #1080157

>>1080155
Вот ради интереса боевой компилятор вместо govnocc
$ icpc -v
icpc version 14.0.0 (gcc version 4.8.0 compatibility)

[Trace timer]: Clocks per second 2,294,860,167
C++ uniform distribution 10000000 runs
Total exec cycles: 99331272
Avg cycles/run : 9
C rand 10000000 runs
Total exec cycles: 283317471
Avg cycles/run : 28

Ответы80164

22 окт, 20:29 #389 #1080160

>>1080153
>Вот тут можно похоливарить
https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
Уже похоливарено

22 окт, 20:30 #390 #1080162

>>1080155
>Атрибуты что бы не дать копилятору удалить код во время оптимизации.
Где-то удалить, а где-то запрещает инлайнить. Мне не понятно зачем это в контексте твоего кода?

22 окт, 20:36 #391 #1080164

>>1080157
Виноват, принёс не самый свежий. Исправляюсь.
$ icpc -v
icpc version 17.0.2 (gcc version 4.8.5 compatibility)
$ icpc -O3 -std=c++11 example.cpp
$ srun a.out
[Trace timer]: Clocks per second 2,294,871,009
C++ uniform distribution 10000000 runs
Total exec cycles: 77200799
Avg cycles/run : 7
C rand 10000000 runs
Total exec cycles: 296607359
Avg cycles/run : 29

>>1080155
Я принёс последний интеловский компилятор, сможешь цифру 7 обуздать? Мне просто тоже стало интересно, насколько быстро можно сделать.

Ответы80166

22 окт, 20:40 #392 #1080166

>>1080164
Слушай, ну впринципе можно со своим mt генератором на AVX и распалаллеленым твистером, но это уже задача посерьезней.

Ответы80167

22 окт, 20:41 #393 #1080167

>>1080166
Присылай, затестим

$ srun cpuinfo
Intel(R) processor family information utility, Version 2017 Update 2 Build 20170125 (id: 16752)
Copyright (C) 2005-2017 Intel Corporation. All rights reserved.

===== Processor composition =====
Processor name : Intel(R) Xeon(R) E5-2697 v4
Packages(sockets) : 1
Cores : 1
Processors(CPUs) : 1
Cores per package : 1
Threads per core : 1

===== Processor identification =====
Processor Thread Id. Core Id. Package Id.
8 0 26 0
===== Placement on packages =====
Package Id. Core Id. Processors
0 26 8

===== Cache sharing =====
Cache Size Processors
L1 32 KB no sharing
L2 256 KB no sharing
L3 45 MB no sharing

22 окт, 20:41 #393 #1080167

>>1080166
Присылай, затестим

$ srun cpuinfo
Intel(R) processor family information utility, Version 2017 Update 2 Build 20170125 (id: 16752)
Copyright (C) 2005-2017 Intel Corporation. All rights reserved.

===== Processor composition =====
Processor name : Intel(R) Xeon(R) E5-2697 v4
Packages(sockets) : 1
Cores : 1
Processors(CPUs) : 1
Cores per package : 1
Threads per core : 1

===== Processor identification =====
Processor Thread Id. Core Id. Package Id.
8 0 26 0
===== Placement on packages =====
Package Id. Core Id. Processors
0 26 8

===== Cache sharing =====
Cache Size Processors
L1 32 KB no sharing
L2 256 KB no sharing
L3 45 MB no sharing

Показать весь текст
Ответы80176

22 окт, 20:58 #394 #1080176

>>1080167
Лол, не. Это надо уже долго сидеть разбираться в тонкостях алгоритма, чтобы подстроить его под SIMD.
Но как говорит вики, есть реализации на SSE2 которые в 2 раза быстрее обычного, с учетом того, что SSE регистры 128 битные и оперируют за раз по 4 32х битных числа, то AVX c 256 битными регистрами теоритически может дать х4 прирост скорости без изменения алгоритма.
Вообще если дальше идти можно и на GPGPU запилить, и генирировать просто таблицу рандом чисел и потом просто идти по ней, это точно будет в десятки раз быстрее, чем даже C++ генератор.

22 окт, 21:24 #395 #1080188

Аноны, какие есть простые интуитивно программы, для создания приложений в оконном режиме?

Ответы801898019280609

22 окт, 21:25 #396 #1080189

>>1080188
Visual Studio

22 окт, 21:28 #397 #1080192

>>1080188
winForm. Не знаю завезли кресты в WPF.
А если тебе кроссплатформу, то попробуй Qt.

Ответы80194

22 окт, 21:29 #398 #1080194

>>1080192
>то попробуй Qt
Легче недельку потратить на изучения шарпа и недельку на WPF, чем несколько лет дрочить Qt и всё равно писать глючную парашу.

22 окт, 22:02 #399 #1080217

Да мне для учебы. Проект не коммерческий.

22 окт, 22:05 #400 #1080219

Аноны, поясните, зачем нужен std::allocator_traits.

Для меня это выглядит как лишняя обертка над std::allocator. То есть вместо того , чтобы явно работать с std::allocator , я буду писать что-то типа:
std::allocator_traits<std::allocator<Type>> и потом уже вызывать методы allocator_traits.
И нахера?

22 окт, 22:44 #401 #1080238

Всегда надо сначала записать вводимый пользователем текст в строку, а потом переводить ее в массив чаров с использованием strcpy или можно сразу в него забить?

Ответы80241

22 окт, 22:46 #402 #1080241

>>1080238
std::string это массивоподобный контейнер, вполне возможно, тебя он устроит.

Ответы80247

22 окт, 22:56 #403 #1080247

>>1080241
Хочу просто понять указатели, поебаться с динамическим массивом чаров. Мне надо эту самую строку, которую введет пользователь, из string перевести в динамический массив. Что-то я запутался.

Ответы8024880254

8 Кб, 392x280

22 окт, 22:59 #404 #1080248

Как-то так.
>>1080247-кун

Ответы802508025180609

22 окт, 23:00 #405 #1080250

>>1080248
char *sym = &str[0];

Ответы8025180669

22 окт, 23:00 #406 #1080251

>>1080248
У вас тут сегфолт.
>>1080250
Отвратная идея.

Ответы80259

22 окт, 23:04 #407 #1080254

>>1080247
Дело в том, что ты сейчас занимаешься С стайлом. Это не кресты. Ты можешь использовать метод c_str для того, чтобы получить из с++ строк std::string С строку которая char*.
Но зачем оно тебе нужно? Работая с C строками, ты работает с со стандартной библиотекой С, а значит тебе не в этот тред.
Ну и std::string в твоём понимании это динамический массив, но правильно это конечно же назвать контейнером.

Ответы802588026280609

22 окт, 23:10 #408 #1080258

>>1080254
Благодаря тебе кое-что прояснилось. Спасибо.

19 Кб, 446x346

22 окт, 23:11 #409 #1080259

>>1080251
Даже не знаю, чем она тебе не приглянулась.

Ответы8026180609

22 окт, 23:17 #410 #1080261

>>1080259
Делаешь лишние предположения о реализации.

Ответы802678027780299

22 окт, 23:18 #411 #1080262

>>1080254
Проиграл с деба, советующего понять указатели, не используя указатели.

Ответы8026580266

22 окт, 23:23 #412 #1080265

>>1080262
Можно изучать указатели, работая со string же, а не с *char.

22 окт, 23:23 #413 #1080266

>>1080262
Где ты видишь, чтобы я ему что-то советовал. Я ответил на его вопросы.
>Мне надо эту самую строку, которую введет пользователь, из string перевести в динамический массив
>Ты можешь использовать метод c_str для того

22 окт, 23:24 #414 #1080267

>>1080261
Что здесь лишнего?

Ответы80269

22 окт, 23:26 #415 #1080269

>>1080267
Предположение, что в эту память можно что-то записывать.

Ответы80272

22 окт, 23:30 #416 #1080272

>>1080269
Непрерывность строки гарантируется.
Чем тогда
pStr[2] = '@';
отличается от
str[2] = '@';
?

Ответы80609

4 Кб, 213x68

22 окт, 23:35 #417 #1080277

>>1080261
А так тоже лишние предположения?

Ответы8028080299

6 Кб, 435x180

22 окт, 23:40 #418 #1080278

Лучше расскажите как вы относитесь к такому способу изучения указателей
Считаю этот код практически произведением искусства и верх гибкости и универсальности и МОЩИ С++.

Ответы80280

22 окт, 23:41 #419 #1080280

>>1080278
Это просто >>1080277 с заменой addressof на &

Ответы80281

22 окт, 23:43 #420 #1080281

>>1080280
Да увидел уже. Делал это когда не было поста того. Но отвлёкся и прослоупочил.

9 Кб, 456x308

22 окт, 23:56 #421 #1080286

Всё таки не хочу перекатываться в С-тред. Хочу просто создать строку *char, занести в нее введенное пользователем значение и работать с ней дальше, используя С++.
Нашел код пикрелейтед, но он ругается на сишную getline. Че делать? Мозги уже кипят.

Ответы80288802898029180302

23 окт, 00:07 #422 #1080288

>>1080286
http://ru.cppreference.com/w/cpp/string/basic_string/getline
getline первым аргументом всегда принимает поток, вторым так называемый буфер и 3 разделитель. А у тебя getline с какой-то непонятной сигнатурой.
А то что у тебя это http://man7.org/linux/man-pages/man3/getline.3.html
Он принимает 3 аргументом поток типа FILE. Короче ты запутался.
Распутывайся.
>Хочу просто создать строку char, занести в нее введенное пользователем значение и работать с ней дальше, используя С++.
Короче. Делай так.
std::string str;
std::getline(std::cin, str);
char c_str = str.c_str();
и всё. Делай с c_str что хочешь

Ответы8029280293

23 окт, 00:07 #423 #1080289

>>1080286
https://ideone.com/8KsfIq
Почитай уже вначале книжку, а потом мучайся.

Ответы80301

23 окт, 00:08 #424 #1080291

>>1080286
Это под windows? getline это unix расширение, на крайняк можно использовать std::getline, а затем из std::string брать char\*

Ответы80294

23 окт, 00:09 #425 #1080292

>>1080288
>char° c_str = str.c_str();
Только вот c_str() возвращает const char°

Ответы802948029580298

23 окт, 00:10 #426 #1080293

>>1080288
>Короче. Делай так.
А не. Не делай. Там const char*. Ща исправлю

Ответы80298

23 окт, 00:11 #427 #1080294

>>1080291
>getline это unix расширение
Да вроде стандарт
http://www.cplusplus.com/reference/istream/istream/getline/
>>1080292
Есть std::string::data(), да только запись в этот буфер это undefined behavior. Вы заебали, прекратите ебать строку указателями, дрочеры чёртовы. Читайте сразу в буфер.

Ответы80297

23 окт, 00:11 #428 #1080295

>>1080292
что мешает взять адрес первого эллемента строки и использовать его?

Ответы8029680299

23 окт, 00:12 #429 #1080296

>>1080295
Прямые руки запрещают.

23 окт, 00:13 #430 #1080297

>>1080294
на пике не плюсовый, а сишный getline http://man7.org/linux/man-pages/man3/getline.3.html

Ответы80301

5 Кб, 394x190

23 окт, 00:13 #431 #1080298

>>1080293
>>1080292

Короче можно так
Отвечаю. Ещё захочешь

Ответы8030080301

23 окт, 00:14 #432 #1080299

>>1080295
Ничего, только вот тут параноики пишут >>1080261

Так или иначе, >>1080277 — официально рабочий способ.

23 окт, 00:15 #433 #1080300

>>1080298
Я в курсе, что так можно.

Ответы80302

23 окт, 00:15 #434 #1080301

>>1080297
point taken
>>1080298
Дикий вырвиглазный костыльный пиздец, да ещё и не портируемый. Нормальный способ >>1080289

Ответы803038030480305

23 окт, 00:15 #435 #1080302

>>1080300
Ну я ему >>1080286

23 окт, 00:16 #436 #1080303

>>1080301
>Нормальный способ
И как потом работать с указателями?

Ответы80306

23 окт, 00:17 #437 #1080304

>>1080301
> да ещё и не портируемый.
Что ты имеешь в виду?

Ответы80311

23 окт, 00:17 #438 #1080305

>>1080301
>да ещё и не портируемый
В каком месте?

Ответы8030680311

23 окт, 00:18 #439 #1080306

>>1080303
Как обычно. buffer это char*
>>1080305
Да нельзя в буфер строки писать, заебал. Он менеджится строкой, как ей вздумается. Придёт боженька и выебет тебя в жопу без самки.

Ответы803078030880310

23 окт, 00:18 #440 #1080307

>>1080306
>без самки
*без смазки

23 окт, 00:19 #441 #1080308

>>1080306
> Придёт боженька и выебет тебя в жопу
Аргумент, ничего не скажешь.

А реальные будут?

Ответы80311

23 окт, 00:20 #442 #1080310

>>1080306
http://en.cppreference.com/w/cpp/string/basic_string/getline
Посмотри пример

Ответы80314

23 окт, 00:20 #443 #1080311

>>1080304
>>1080305
>>1080308
Блядь, и чего вам, дебилам, в плюсах будто мёдом намазано? Сидели бы и писали на пыхе
https://stackoverflow.com/questions/1042940/writing-directly-to-stdstring-internal-buffers
After a lot more reading and digging around I've discovered that string::c_str and string::data could legitimately return a pointer to a buffer that has nothing to do with how the string itself is stored. It's possible that the string is stored in segments for example. Writing to these buffers has an undefined effect on the contents of the string.

Additionally, string::operator[] should not be used to get a pointer to a sequence of characters - it should only be used for single characters. This is because pointer/array equivalence does not hold with string.

What is very dangerous about this is that it can work on some implementations but then suddenly break for no apparent reason at some future date.

Therefore the only safe way to do this, as others have said, is to avoid any attempt to directly write into the string buffer and use a vector, pass a pointer to the first element and then assign the string from the vector on return from the dll function.

Ответы8031280609

23 окт, 00:21 #444 #1080312

>>1080311
> answered Jun 25 '09
Мда.

23 окт, 00:22 #445 #1080314

>>1080310
Посмотрел. Что должно мне придти в голову?

Ответы80318

23 окт, 00:33 #446 #1080318

>>1080314
То есть ты хочешь сказать, что
str[0] всегда равно char ptr = &(str.begin());
Но str[1] не всегда будет равно prt[1]?

Ответы80319

23 окт, 00:38 #447 #1080319

>>1080318
Я хочу сказать, что при некоторых (очень маловероятных) условиях &str[0]+n и &str[n] будут различаться. Кроме этого при других условиях c_str() и data() могут вернуть указатель на другой буфер (например, копию). Кроме этого я хочу сказать, что буфер может быть убит при модификации строки любым non-const методом. Кроме этого я хочу сказать, что синтаксис с нулевым элементом просто уродлив.
По совокупности показателей так делать нельзя. Это быдлокод.

Ответы803208032180322

23 окт, 00:42 #448 #1080320

>>1080319
>Я хочу сказать, что при некоторых (очень маловероятных) условиях &str[0]+n и &str[n] будут различаться. Кроме этого при других условиях c_str() и data() могут вернуть указатель на другой буфер (например, копию).
Назови эти условия.
P.S. Про то, что мы говорим про C++11+—эру упоминать дополнительно смысла нет, я думаю.

> Кроме этого я хочу сказать, что буфер может быть убит при модификации строки любым non-const методом.
Нет, любым не может.

Ответы80326

23 окт, 00:44 #449 #1080321

>>1080319
>Это быдлокод
А использовать char* в крестах это нормально?

Ответы803238032680609

23 окт, 00:44 #450 #1080322

>>1080319
Это совершенно неважно в рамках обучения указателям. Так то конечно реализации могут быть разными, Small Buffer Optimization та же.

Ответы80326

23 окт, 00:45 #451 #1080323

>>1080321
А как взаимодействовать с реальным миром? Винапи там, ядро линукса.

Ответы80334

23 окт, 00:50 #452 #1080326

>>1080320
Ты делаешь очень много лишних допущений.
https://stackoverflow.com/questions/14290795/why-is-modifying-a-string-through-a-retrieved-pointer-to-its-data-not-allowed
Зачем ты придумываешь на ходу свой собственный манястандарт, конченный? Совсем необучаемый?
>>1080321
Да, вполне нормально. Указатели это не такая уж и редкая штука.
>>1080322
>Это совершенно неважно в рамках обучения указателям.
Нет, это не нормально в процессе обучения. Не надо учиться писать быдлокод, а потом переучиваться. Сизифов труд это необучаемость

Ответы8033080331

23 окт, 00:54 #453 #1080330

>>1080326
>Ты делаешь очень много лишних допущений.
Всего 3 предложения из стандарта.

> https://stackoverflow.com/questions/14290795/why-is-modifying-a-string-through-a-retrieved-pointer-to-its-data-not-allowed
> Now, that being said, it is perfectly valid to modify the &str[0] pointer, and the array of characters therein. So long as you stay in the half-open range [0, str.size()).

Сам себя переспорил, молодец.

23 окт, 00:54 #454 #1080331

>>1080326
По твоей же ссылке написано, что это легаси (за исключением модификации ссылки на пустую строку)

23 окт, 00:58 #455 #1080334

>>1080323
>А как взаимодействовать с реальным миром?
Хорошее замечание кстати. Но дело в том, что изначально был вопрос о том, как ввести строку из консольки и представить её в виде сишной строки.
Хотя стоит отметить, что если ты используешь winAPI, то ты используешь их затайпдейфиное чудо. Понятно, что за каким нибудь TCHAR скрывается char для ANSI и w_char для unicode. Но всё таки.

23 окт, 13:23 #456 #1080495

Пацантре, а где посмотреть как устроен <thread>
Не его .h файл, а именно сам код. Вот например если для шиндовса, то где посмотреть как оно winAPI юзает?

Ответы80508

23 окт, 13:46 #457 #1080504

Двач, я что-то семантику перемещения понять не могу хотя и просмотрел уже всё что можно по этой теме, скажите хотя-бы, move semantics и perfect forwarding это одно и тоже или разное?

Ответы8053780609

23 окт, 14:03 #458 #1080508

>>1080495
Где-нибудь в Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/crt/src

23 окт, 15:09 #459 #1080537

>>1080504
Разное
забей на forward, пока не поймёшь что такое move

23 окт, 16:59 #460 #1080592

Работаю с winsock С++
Кто-нибудь объяснит, отчего может возникать ошибка 11004
WSANO_DATA?
Когда запускаю функцию в консольном приложении
hn = gethostbyaddr((char*)&IP, 16, AF_INET);
всё работает нормально. Но когда класс с этой же функцией использую в winapi, выдаёт такую ошибку. Ещё указывается, что hostent hn равняется nullptr, поэтому невозможно прочитать
hn->name, а именно это и надо.

Ответы80609

23 окт, 17:18 #461 #1080609

>>1080592
Внимательно прочитай статью на MSDN и узнай из неё, что должно быть в IP.
>>1079960
Ясен хуй, либо твоё компилятор не поддерживает новый стандарт драфт, либо нужный номер стандарта не указал.
>>1080188
Это ты в С++-треде спрашиваешь про интуитивную понятность?
>>1080254 >>1080321
Попробуй считать блок данных из потока, не используя обычный указатель.
>>1080259
Это нормально, а >>1080248 - нет.
>>1080272
>Непрерывность строки гарантируется.
В С++11 и далее.
>>1080311
В С++11 и далее непрерывность строки гарантируется, а в С++17 ещё и неконстантная .data()
>>1080504
До меня только вот только недавно всё это дерьмо допёрло. Объясняю.
Есть ссылки, ссылки могут быть обычные и на конст. Комитет решил, что обычные ссылки ссылаться на временные значения не могут, так программисты будут ошибаться, думая, что значение, переданное по обычной ссылке будет использовано. Поэтому комитет сказал, что передавать временные значения по обычной ссылке нельзя, а по ссылке на конст - можно (и при этом деструктор откладывается до момента выхода функции, в которую по ссылке на конст было передано временное значение).
Охуеть, конечно. Потом комитет догадался до того, что иногда может быть плохо с точки зрения производительности НЕ изменять временное значение, так как в нём могут быть ресурсы (в широком смысле слова: память, дескрипторы, некопируемые объекты), которые можно и нужно использовать заново, и комитету пришлось ввести rvalue-ссылки (&&), которые такие же, как const &-ссылки, но позволяют менять объект. При этом есть соглашение о том, что объект, принятый по &&-ссылке, не должен вызывать ошибок после изменения, то есть, использовать его нужно правильно, а не "хуй с ним всё равно сдохнет". Соответственно, если есть две функции - f (const X& x) и f(X&& x), то, по принятому соглашению, обе они используют x, как входной параметр, и к тому же вторая функция может оставить объект пустым. std::move - это ТОЛЬКО преобразование любой ссылки не на конст в rvalue-ссылку, то есть, с помощью этой функции ты говоришь "ресурсы этого объекта можно заюзать", и вызывается более подходящая перегрузка функции.
Охуеть, стало лучше. Теперь появилась другая проблема - есть шаблоны, и шаблонным функциям иногда похуй на то, что они принимают, им всего лишь нужно передать аргумент дальше по цепочке без изменений, но если они принимают ссылку только одного типа, то для вложенных вызовов функций теряется информация о том, что ресурсы можно забрать.

Для этого ввели понятие "reference collapsing", которое означает, что если у тебя есть
template<typename T>
void f(T&& t) {

}

то у этого тимплейта будет два инстанса - в одном инстансе будет T&& t, а в другом инстансе будет T& t, и эти инстансы будут выбираться в соответствии с переданным аргументом. Но и здесь тоже возникает проблема: rvalue-ссылка прозрачна, и когда ты используешь ссылку, ты в 99,9999% случаев используешь объект, и тебе не видно, что объект этот - объект, ссылка или rvalue-ссылка. Чтобы решить эту проблему, ввели std::forward. который делает то же самое, что и std::move, но только тогда, когда тип аргумента - rvalue-ссылка.

Вот теперь заживём, блядь.

23 окт, 17:18 #461 #1080609

>>1080592
Внимательно прочитай статью на MSDN и узнай из неё, что должно быть в IP.
>>1079960
Ясен хуй, либо твоё компилятор не поддерживает новый стандарт драфт, либо нужный номер стандарта не указал.
>>1080188
Это ты в С++-треде спрашиваешь про интуитивную понятность?
>>1080254 >>1080321
Попробуй считать блок данных из потока, не используя обычный указатель.
>>1080259
Это нормально, а >>1080248 - нет.
>>1080272
>Непрерывность строки гарантируется.
В С++11 и далее.
>>1080311
В С++11 и далее непрерывность строки гарантируется, а в С++17 ещё и неконстантная .data()
>>1080504
До меня только вот только недавно всё это дерьмо допёрло. Объясняю.
Есть ссылки, ссылки могут быть обычные и на конст. Комитет решил, что обычные ссылки ссылаться на временные значения не могут, так программисты будут ошибаться, думая, что значение, переданное по обычной ссылке будет использовано. Поэтому комитет сказал, что передавать временные значения по обычной ссылке нельзя, а по ссылке на конст - можно (и при этом деструктор откладывается до момента выхода функции, в которую по ссылке на конст было передано временное значение).
Охуеть, конечно. Потом комитет догадался до того, что иногда может быть плохо с точки зрения производительности НЕ изменять временное значение, так как в нём могут быть ресурсы (в широком смысле слова: память, дескрипторы, некопируемые объекты), которые можно и нужно использовать заново, и комитету пришлось ввести rvalue-ссылки (&&), которые такие же, как const &-ссылки, но позволяют менять объект. При этом есть соглашение о том, что объект, принятый по &&-ссылке, не должен вызывать ошибок после изменения, то есть, использовать его нужно правильно, а не "хуй с ним всё равно сдохнет". Соответственно, если есть две функции - f (const X& x) и f(X&& x), то, по принятому соглашению, обе они используют x, как входной параметр, и к тому же вторая функция может оставить объект пустым. std::move - это ТОЛЬКО преобразование любой ссылки не на конст в rvalue-ссылку, то есть, с помощью этой функции ты говоришь "ресурсы этого объекта можно заюзать", и вызывается более подходящая перегрузка функции.
Охуеть, стало лучше. Теперь появилась другая проблема - есть шаблоны, и шаблонным функциям иногда похуй на то, что они принимают, им всего лишь нужно передать аргумент дальше по цепочке без изменений, но если они принимают ссылку только одного типа, то для вложенных вызовов функций теряется информация о том, что ресурсы можно забрать.

Для этого ввели понятие "reference collapsing", которое означает, что если у тебя есть
template<typename T>
void f(T&& t) {

}

то у этого тимплейта будет два инстанса - в одном инстансе будет T&& t, а в другом инстансе будет T& t, и эти инстансы будут выбираться в соответствии с переданным аргументом. Но и здесь тоже возникает проблема: rvalue-ссылка прозрачна, и когда ты используешь ссылку, ты в 99,9999% случаев используешь объект, и тебе не видно, что объект этот - объект, ссылка или rvalue-ссылка. Чтобы решить эту проблему, ввели std::forward. который делает то же самое, что и std::move, но только тогда, когда тип аргумента - rvalue-ссылка.

Вот теперь заживём, блядь.

Показать весь текст
Ответы8062080621806268063981066

23 окт, 17:21 #462 #1080614

Короче говоря, perfect forwarding - это название для упорных попыток устранить копирования и сохранить move semantics во всех ситуациях, включая шаблоны, которые только передают аргументы дальше по цепочке.

23 окт, 17:32 #463 #1080620

>>1080609
>Внимательно прочитай статью на MSDN и узнай из неё, что должно быть в IP

У меня всё по канонам.
IPAddr IP = inet_addr(xxx.xxx.xxx.xxx");
const struct hostent hn = new hostent;
hn = gethostbyaddr((char)&IP, 16, AF_INET);

Я же сказал, что код не работает только в winapi-программе

Ответы806278065180653

23 окт, 17:33 #464 #1080621

>>1080609
>>Непрерывность строки гарантируется.
>В С++11 и далее.
Спасибо, я в курсе. Очевидные вещи про версию стандарта просто не стал писать.

23 окт, 17:42 #465 #1080626

>>1080609
>std::move - это ТОЛЬКО преобразование любой ссылки не на конст в rvalue-ссылку
std::move это преобразование value category, а не типа. Читать, например, Мейерса нужно внимательно. Нет, ВНИМАТЕЛЬНО:
> Thus, std::move casts its argument to an rvalue, and that’s all it does.
Написано, что casts to an rvalue, а не casts to an rvalue reference.

> Для этого ввели понятие "reference collapsing"
Правило reference collapsing ввели вместе с появлением самих ссылок, ещё в C++98.
В C++11 просто дополнили правила коллапсинга для rvalue-ссылок и ввели специальное правило вывода типа шаблонной функции T, у которой тип аргумента указан как T&&. perfect forwarding работает в первую очередь благодаря этому правилу, а reference collapsing там на втором месте.

23 окт, 17:43 #466 #1080627

>>1080620
Какой-то ты ебанутый. У тебя память течёт, так как сначала ты создаёшь hostent, а потом просериваешь указатель на него.

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

Ответы80634

23 окт, 17:50 #467 #1080634

>>1080627
До этого я не выделял память, так что не из-за этого

23 окт, 17:59 #468 #1080639

>>1080609
>нет
Что нет это понятно каждому лол. Труднее сказать почему нет. Разъясни почему нет?

Ответы80669

23 окт, 18:13 #469 #1080651

>>1080620
Навскидку - не та ширина чара?

23 окт, 18:14 #470 #1080653

>>1080620
На стэковерфлоу такой коммент:

This is not an issue with having or not having an Internet connection. There is no guarantee that gethostbyname() can always resolve the hostname reported by gethostname() into an IP address on all platforms. So don't even try it, it is the wrong approach anyway. Use getifaddrs() or similar function instead.

Ответы80682

23 окт, 18:37 #471 #1080669

>>1080639
Он пишет в никуда - создал один объект (char), а указатель использует так, как будто объектов дохуя. Очевидный UB (по правилам использования указателей, не указывающих на созданные объекты). Что лежит в динамической памяти после ОДНОГО созданного char - лишь аллаху известно. >>1080250 - ненормально потому, что гарантий непрерывности строки до C++11 не было, и теоретически строка может быть сегментирована, и оператор[] эту сегментацию прячет только тогда, когда ты его применяешь к самой строке.

23 окт, 18:53 #472 #1080676

>>1075680
вот он прав >>1075791, в релиз билде уже на -O2 все символьники так едут, что проще и даже полезнее их не подключать. проще собирать корку/дамп и анально щпялиться в ассемблер. или заюзать чонить типа sxstrace

23 окт, 19:00 #473 #1080677

Мне нужно построить простейший график. Возможно ли это, используя одну лишь стандартную библиотеку? После непродолжительного поиска нашёл только сторонние приложения и обёртки, но не одной самобытной либы.

Ответы8067981028

23 окт, 19:05 #474 #1080679

>>1080677
Увы нет. Именно только стандартной не обойдешься.
Используй gnuplot.

23 окт, 19:14 #475 #1080682

>>1080653
>Use getifaddrs() or similar function instead.
Спасибо, попробую

23 окт, 19:35 #476 #1080691

Как реализовать поиск наиболее часто повторяющегося элемента в массиве?

Ответы8069380710

23 окт, 19:35 #477 #1080693

>>1080691
Без задней мысли.

23 окт, 19:54 #478 #1080710

>>1080691
>Как реализовать поиск наиболее часто повторяющегося элемента в массиве?
Что нибудь слышал о map?

Ответы81028

23 окт, 20:50 #479 #1080758

Не гоните сразу ссаными тряпками, ньюфаня в треде, собственно вопрос в чём, в винде для создания банального интерфейса использовал windows forms а что на линухе? wxWidgets?

Ответы8076680767

23 окт, 20:54 #480 #1080766

>>1080758
Xlib,GTK,Qt,wxWidgets

Ответы8076780768

23 окт, 20:55 #481 #1080767

>>1080766
>>1080758
Но ты скорее хотел получить ответ Xlib.

Ответы80768

23 окт, 20:56 #482 #1080768

>>1080766
>>1080767
Что для даунов больше подходит?
Нужно быстро набросать проект и забыть о нем навсегда

Ответы8076980770

23 окт, 20:57 #483 #1080769

>>1080768
>Что для даунов больше подходит?
Java

Ответы80770

23 окт, 20:58 #484 #1080770

>>1080768
>Нужно быстро набросать проект и забыть о нем навсегда
Ух не ту платформу ты выбрал. Пиши на java да. >>1080769

Ответы80771

23 окт, 20:59 #485 #1080771

>>1080770
>Ух не ту платформу ты выбрал
В том то и дело что не выбирал

Ответы80774

23 окт, 21:01 #486 #1080774

>>1080771
А что там от GUI нужно? Зависит от сложности самого интерфейса.
Думаю Qt тебе подойдёт. Накидаешь там кнопок в форму и забудешь как страшный сон

Ответы80776

23 окт, 21:03 #487 #1080776

>>1080774
>Накидаешь там кнопок в форму
Это и надо было.
Спасибо.

24 окт, 07:49 #488 #1080993

Поясните за библиотеки. Зачем нужен .lib, почему одного .h недостаточно? Алсо, скажите где можно почитать об этом, желательно на русском

Ответы8099581029

24 окт, 07:55 #489 #1080995

>>1080993
.lib - это много уже скомпилированных в объектный файл .cpp-шников

24 окт, 07:55 #490 #1080996

Только вкатываюсь, Серёжа, посоветуй чем парсить аргументы, что пришли с запуском. Самому писать и смотреть, что там в *argv[] мне пока ссыкотно, а нужны простые и gnu-сные уметь, так же значения по умолчанию и обязательные параметры. Чую, если буду писать велосипед остаток недели, сразу обосрусь и не будет радости.

Ответы810288106081064

24 окт, 09:42 #491 #1081028

>>1080677
Что такое "построить график"? Вывести в память массив байт-пикселей для заданной функции - запросто.
>>1080710
А точнее - unordered_map.
>>1080996
https://www.gnu.org/software/libc/manual/html_node/Getopt.html
https://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html

Ответы81311

24 окт, 09:51 #492 #1081029

>>1080993
В .h у тебя должны храниться только прототипы того, что ты хочешь использовать. А вся их реализация хранится в cpp. Но для того, чтобы каждый раз не транслировать твой cpp в объектный код. Придумали lib. Статическая библиотека. По сути это просто тот же cpp только в объектом коде.

Ответы81055

24 окт, 11:14 #493 #1081055

>>1081029
Т.е. lib это предварительно скомпилированный cpp?
Алсо, вопрос, в доках по сборке libcurl есть 2 варианта сборки: static и dll. В чем разница и какой выбрать?

Ответы810568105781070

24 окт, 11:20 #494 #1081056

>>1081055
Статический и динамический же.
Первый жирнее, но если ты передашь его на другой компьютер с той же архитектурой и операционной системой, он запустится.
Второй меньше. Но если ты передаешь его на другой комплуктер, а Vasyan_laba.dll передать забудешь, ничего не заработает. С другой стороны, зачем тебе статик, если ты ссылаешься, например, на директиксовую (или еще какуюраспространенную) библиотечку?
Уженешкольник

24 окт, 11:22 #495 #1081057

>>1081055
Заебал. Все равно нихуя не поймешь.
Иди учи как работает компиляция и линковка

Ответы81084

24 окт, 11:25 #496 #1081060

>>1080996
boost::program_options

Ответы81311

24 окт, 11:29 #497 #1081063

Добре, давно у вас не был. Читал изменения C++17. Если от 11 у меня мурашки по коже были, в 14 были интересные моменты, то в 17 вообще не понятно, что и зачем. Опять это ебучее метапрограммирование, костыли на костыли. Неужели нельзя без этого?
Вопрос от дилетанта, кресты давно не практикую, современные стандарты так не трогал вообще толком.

Ответы8107081072

24 окт, 11:30 #498 #1081064

>>1080996
Берешь FSM генератор типа ragel ну или bison. .Забиваешь туда свою грамматику.
.Генируриешь парсер.
.Встраиваешь его в свою программу.
.Получаешь распарсенные аргементы.
.PROFIT???

Петушков с бустом не слушай, вообще лучше ничего из буста не используй никогда.

24 окт, 11:33 #499 #1081066

>>1080609
>Ясен хуй, либо твоё компилятор не поддерживает новый стандарт драфт, либо нужный номер стандарта не указал.
Оказывается есть в visual studio переключалка на крайний драфт ISO C++ Latest Draft Standard (/std:c++latest). Но это все равно не помогло, майки тормозят.
В чем разница между c++17 и Latest Draft? Второй это уже добавление фич из c++20?

Ответы81070

24 окт, 11:46 #500 #1081070

>>1081055
>Т.е. lib это предварительно скомпилированный cpp?
Нет. lib - это архив с объектными файлами (.o или как оно там у вендозных) и ещё чем-то. Когда ты компилируешь файл, ты получаешь объектный файл.
>какой выбрать?
Любой.
>>1081063
>Неужели нельзя без этого?
Ты ещё спроси: "неужели нельзя без шаблонов". Можно, но тогда STL не сможет существовать.
>>1081066
>В чем разница между c++17 и Latest Draft?
НЕЕБУ.

24 окт, 11:46 #501 #1081071

Почему в VS 17 автоматически через клас визард не пишется прагма ванс и не добавляется в сипипипи файл инклюд с хедером на заголовочный на созданный только что клас???

Ответы81073

24 окт, 11:48 #502 #1081072

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

Что в этом страшного?:
Символьные литералы UTF-8
Удаление некоторых устаревших типов и функций, например, таких как std::auto_ptr, std::random_shuffle или старых функциональных адаптеров
Библиотека файловой системы, основанная на boost::filesystem
Параллельные версии алгоритмов STL
Некоторые математические функции

24 окт, 11:49 #503 #1081073

>>1081071
Напиши им в багтрекер.

Ответы81080

24 окт, 12:08 #504 #1081080

>>1081073
Если серьёзно, то class wizard реально не создаёт автоматически шапки дл конструктора, деструктора, прагма уанс итд
Это всё в VS17,

у меня одного так ?

Ответы8108281098

24 окт, 12:12 #505 #1081082

>>1081080
Если серьёзно, то таки напиши им в багтрекер. Может они и предполагают такое поведение.

>не создаёт автоматически шапки дл конструктора, деструктора
Еще бы возможность галочками отмечать требуемые функции. И чтоб с семантиками копирования/перемещения.

24 окт, 12:21 #506 #1081084

>>1081057
Тащемта я и спрашиваю где об этом можно почитать

24 окт, 12:57 #507 #1081098

>>1081080
Походу у одного. У меня на VS17 всё перечисленное создаётся само. Ты добавляешь класс к проекту, или создаёшь отдельно?

Ответы81099

24 окт, 13:02 #508 #1081099

>>1081098
А да, в этом проблема, спасибо

24 окт, 14:21 #509 #1081131

В MSVS 17 испортил файл ws2def.h и сохранил. Где найти в сети эти файлы или можно ли как-то восстановить?

Ответы8113481143

24 окт, 14:34 #510 #1081134

>>1081131
Ну ты и васян. Это ты с winAPI сокетами ебался в ньюфаг треде?
Хз. Как восстановить.
https://github.com/stuta/Luajit-Tcp-Server/blob/master/c_include/windows/original/ws2def.h
Посмотри это то?

Ответы81157

10 Кб, 480x360

24 окт, 14:50 #511 #1081143

>>1081131

24 окт, 15:14 #512 #1081157

>>1081134
Лол. До сих пор ебусь
>ссылка
не похоже совсем даже

24 окт, 17:22 #513 #1081239

ПЕ РЕ КАТ
>>1081237 (OP)
>>1081237 (OP)
>>1081237 (OP)
>>1081237 (OP)
>>1081237 (OP)

24 окт, 19:10 #514 #1081311

>>1081060
не, нахуй его надо, этот буст.

>>1081028
мне надо что-нибудь с mit / bsd лицензией, гну это дно.

Тред утонул или удален.
Это копия, сохраненная 15 ноября 2017 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion