Двач.hk не отвечает.
Вы видите копию треда, сохраненную 22 августа 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
404 Кб, 1000x1791
C++ тред #511121 В конец треда | Веб
"Чей это крик? - спросил, не чая тишины, -
Какой толпы, страданьем побежденной?"

И Вождь в ответ: "То рвутся пуканы
Крестоблядей, что прожили, не зная
Pure functions, что Всевышним нам даны.

И с ними школьников дурная стая,
Чья лаба к сроку не была сдана,
Кто тонет в легаси, от жизни отставая.

Их свергла Java, не терпя пятна,
И пропасть asm'а их не принимает,
Иначе возгордилась бы вина".


Литература:

Для нюфань:
Три классических учебника для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Герберт Шилдт - C++. Базовый курс - http://padabum.com/x.php?id=15127
Роберт Лафоре - Объектно-ориентированное программирование в C++ - http://padabum.net/x.php?id=16885
Стивен Прата - Язык программирования C++ - http://bukin.su/share/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8/cpp/Prata_C++.pdf

Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ - http://www.e-reading.club/book.php?book=1002058
Скотт Мейерс - Наиболее эффективное использование C++ - http://www.proklondike.com/var/file/C/Scott_Meyers_-_More_Effective_CPP(RUS).rar
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ - http://coollib.com/b/176648

Тонкости языка (для гурманов):
Ад и хардкор.
Бьерн Страуструп - Язык программирования C++ - http://www.proklondike.com/var/file/straustrup-yazyk-c-speciazdanie.zip
Андрей Александреску - Современное проектирование на C++ - http://www.proklondike.com/var/file/C/Andrei_Alexandrescu_-_Sovremennoe_Proectirovanier_CPP.rar
Герб Саттер - Решение сложных задач на C++ - http://www.studfiles.ru/dir/cat32/subj1104/file8061.html
Стандарт языка (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf

Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии - http://www.proklondike.com/var/file/Paralelnie_programirovanie.zip
Николаи Джоссатис - C++. Стандартная библиотека - http://my-files.ru/Download/cdm4zk%20Джосаттис%20Н.М.%20-%20Стандартная%20библиотека%20C%20.%20Справочное%20руководство%20-%202014.djvu

Ссылки:

Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru/
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/
Блог Герба Саттера (на ангельском) - http://herbsutter.com/
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru/

Памятка:

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

Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode

Предыдущий: >>503274
sage #2 #511124
Красава, достойный преемник, благословляю.
#4 #511128
>>511126
Вот это я обосрался. В следующий раз исправлюсь, мамой клинус.
#5 #511139
>>511121
Аноны, а действительно С много быстрее С++? Я как-то пробовал тестить, но разницы не заметил.
#6 #511150
>>511139
Если на C++ писать в стиле C, то нет. Но никто так не делает.
#7 #511160
>>511139
Отключи процессорный кеш и посмотри.
#8 #511184
>>511160
Ты имеешь в ввиду в биосе отключить? И что, сильно проигрывает?
#10 #511238
>>511121
Анон с помощью чего ты работаешь с zip архивами в C++?
#12 #511303
Локальные переменные из main тоже в стэк попадают?
#13 #511310
>>511303
Нет блядь в жопу они попадают в жопу!!!
#14 #511311
>>511310
А глобальные?
#15 #511318
>>511311
Глобальные переменные и статические члены класса выделяются при старте в сегменте данных сразу, не на стеке.
#16 #511321
>>511318
>>511318

> статические члены класса


Что это и зачем? Чтобы сделать такой член надо просто static перед его объявлением написать?
#17 #511326
>>511321
Да. Статический член создается один раз для всего класса, а не каждый раз новый для нового объекта класса. Нужно, например, для реализации синглтонов, ну и вообще когда что-то встречается один раз на всю программу.
#18 #511332
>>511326
В сегмент данных можно положить функцию?
#19 #511337
>>511332
Ты можешь создать массив и записать в него любые байты, например, те, из которых состоит функция. Но легально ее исполнить не получится придется делать reinterpret_cast к указателю на функцию, и по стандарту поведение будет неопределенным, например, может сработать защита от выполнения данных.
#20 #511339
>>511337
А если в С++ пишу статическую функцию-член класса она как в сегмент данных попадает?

Всё правильно написал? В динамическую попадают ТОЛЬКО new delete?
[code lang="cpp"]
#include<bits/stdc++.h>
using namespace std;
const int Maxn=100020; //статическая
int l[Maxn],d[Maxn]; //статическая
vector<int>G[Maxn]; //статическая
int n,ans; //статическая
int sum[Maxn],cnt[202]; //статическая
int main()
{
scanf("%d",&n);
int all=0; //стековая
for(int i=1;i<=n;i++)scanf("%d",l+i); // i в какой памяти?
for(int i=1;i<=n;i++)scanf("%d",d+i),all+=d,G[l].push_back(d),sum[l]+=d;
int tot=0,maxx=max_element(l+1,l+n+1); //стековая
for(int i=1;i<=maxx;i++)
{
if(!G.size())continue;
int t=0,q=G.size()-1; //стековая
for(int j=200;j>=1&&q;j--)
{
if(q>cnt[j]){q-=cnt[j];t+=j
cnt[j];}
else{t+=jq;break;}
}
for(int v:G)cnt[v]++;
ans=max(ans,sum+t);
}
printf("%d\n",all-ans);
}
[code]

кодрандом*
#20 #511339
>>511337
А если в С++ пишу статическую функцию-член класса она как в сегмент данных попадает?

Всё правильно написал? В динамическую попадают ТОЛЬКО new delete?
[code lang="cpp"]
#include<bits/stdc++.h>
using namespace std;
const int Maxn=100020; //статическая
int l[Maxn],d[Maxn]; //статическая
vector<int>G[Maxn]; //статическая
int n,ans; //статическая
int sum[Maxn],cnt[202]; //статическая
int main()
{
scanf("%d",&n);
int all=0; //стековая
for(int i=1;i<=n;i++)scanf("%d",l+i); // i в какой памяти?
for(int i=1;i<=n;i++)scanf("%d",d+i),all+=d,G[l].push_back(d),sum[l]+=d;
int tot=0,maxx=max_element(l+1,l+n+1); //стековая
for(int i=1;i<=maxx;i++)
{
if(!G.size())continue;
int t=0,q=G.size()-1; //стековая
for(int j=200;j>=1&&q;j--)
{
if(q>cnt[j]){q-=cnt[j];t+=j
cnt[j];}
else{t+=jq;break;}
}
for(int v:G)cnt[v]++;
ans=max(ans,sum+t);
}
printf("%d\n",all-ans);
}
[code]

кодрандом*
#21 #511341
>>511337
А если в С++ пишу статическую функцию-член класса она как в сегмент данных попадает?

Всё правильно написал? В динамическую попадают ТОЛЬКО new delete?
[code lang="cpp"]
#include<bits/stdc++.h>
using namespace std;
const int Maxn=100020; //статическая
int l[Maxn],d[Maxn]; //статическая
vector<int>G[Maxn]; //статическая
int n,ans; //статическая
int sum[Maxn],cnt[202]; //статическая
int main()
{
scanf("%d",&n);
int all=0; //стековая
for(int i=1;i<=n;i++)scanf("%d",l+i); // i в какой памяти?
for(int i=1;i<=n;i++)scanf("%d",d+i),all+=d,G[l].push_back(d),sum[l]+=d;
int tot=0,maxx=max_element(l+1,l+n+1); //стековая
for(int i=1;i<=maxx;i++)
{
if(!G.size())continue;
int t=0,q=G.size()-1; //стековая
for(int j=200;j>=1&&q;j--)
{
if(q>cnt[j]){q-=cnt[j];t+=j
cnt[j];}
else{t+=j*q;break;}
}
for(int v:G)cnt[v]++;
ans=max(ans,sum+t);
}
printf("%d\n",all-ans);
}
[/code]
#21 #511341
>>511337
А если в С++ пишу статическую функцию-член класса она как в сегмент данных попадает?

Всё правильно написал? В динамическую попадают ТОЛЬКО new delete?
[code lang="cpp"]
#include<bits/stdc++.h>
using namespace std;
const int Maxn=100020; //статическая
int l[Maxn],d[Maxn]; //статическая
vector<int>G[Maxn]; //статическая
int n,ans; //статическая
int sum[Maxn],cnt[202]; //статическая
int main()
{
scanf("%d",&n);
int all=0; //стековая
for(int i=1;i<=n;i++)scanf("%d",l+i); // i в какой памяти?
for(int i=1;i<=n;i++)scanf("%d",d+i),all+=d,G[l].push_back(d),sum[l]+=d;
int tot=0,maxx=max_element(l+1,l+n+1); //стековая
for(int i=1;i<=maxx;i++)
{
if(!G.size())continue;
int t=0,q=G.size()-1; //стековая
for(int j=200;j>=1&&q;j--)
{
if(q>cnt[j]){q-=cnt[j];t+=j
cnt[j];}
else{t+=j*q;break;}
}
for(int v:G)cnt[v]++;
ans=max(ans,sum+t);
}
printf("%d\n",all-ans);
}
[/code]
#22 #511363
>>511341
Статический метод попадает туда же, куда и обычные методы - в сегмент команд. Суть в том, что методы не копируются для каждого объекта класса. В смысле размещения все функции "статические", потому что все функции, которые вызываются хотя бы один раз, записываются в память и не дублируются. static-методы отличаются только тем, что они не принимают неявно первым параметром указатель на объект, и поэтому их можно вызывать не только от имени объекта как mamka.ebat (), но и вообще при отсутствии объектов класса, от имени всего класса: TvoyaMamka::ebat ().

Написал правильно, i это такая же локальная переменная, ее разместят на стеке.
32 Кб, 351x604
#23 #511480
Анон, вопрос не совсем по С++, но где его еще задать, если не здесь. Если я последовательно, начиная с начала, пишу в файл (в файловой системе NTFS) блоки равные размеру кластера, скажем 2 килобайта, могу ли я быть уверенным, что записав 2Кб данных, будет записан ровно один кластер (я не выйду за его пределы)? И хранит ли нтфс в кластерах какую-либо служебную информацию?
#24 #511500
>>511480
Ты можешь быть уверен, что будет записано не более двух кластеров.
#25 #511523
Поясните, а где узнать какие команды требуют каких функций?
Например, я пишу: >>, а мне выдаёт ошибку что >> не определена.
53 Кб, 550x383
#26 #511525
>>511500
Спасибо, ты мне безумно помог! Раз ты так хорошо разбираешься в вопросе, то может ты мне ответишь: как писать блоки так, чтобы они не выходили за пределы кластера?
#27 #511554
>>511523
operator>> же.
>>511525
Если ты работаешь со стандартной библиотекой, то ты не можешь гибко на это влиять, т.к. считается, что этим занимается ОС, и она наиболее быстро будет их записывать, исходя из ее знаний об оборудовании. Если тебе нужно самому, то, вероятно, придется отказаться от стандартных интерфейсов для работы с файлами и самому работать с ФС на низком уровне. Потому что для обычной записи вообще не гарантируется, что что-либо пишется на диск на самом деле, ты можешь управлять сбросом буфера, но очень толсто, одной командой "сбросить все", и сделаешь только хуже с большой вероятностью. Оно может, например, кэшироваться в памяти, и не сбрасываться на диск вплоть до конца работы приложения. А чтобы работать именно с диском, тебе понадобится отдельная библиотека, наподобие boost::filesystem.
#28 #511561
Анон можешь пояснить нубу за сокеты и их использование?
#29 #511577
>>511561
Тебе в C-тред, лалка. Господа здесь используют нормальные высокоуровневые библиотеки вроде Casablanca и не ебутся с этим говном.
#30 #511579
Поясните, я вчера начал изучать ваши кресты, а всё гугланул уже. Хотел спросить - у меня русский язык выводился как крякозябры, решилось всё setlocale(LC_ALL, "Russian"); в мейне.
Не думал что тут такие же кодо-проблемы уровня пхп.
#31 #511599
>>511554
Тут вопрос не в библиотеке, и не в том, когда данные записываются, я могу вообще использовать WinAPI, вопрос в том: доступен ли пользовательским данным весь объем кластера на диске, или в нем содержится еще какая-то служебная информация? Это вопрос о структуре NTFS. Я пытался найти инфу, но там в основном о структуре тома, если ты знаешь где можно почитать, то скинь.
13 Кб, 296x251
#32 #511601
>>511579
Это ты рукажопый.
25 Кб, 807x495
#33 #511605
>>511601
Что за программа?
У меня так.
#34 #511610
>>511605
Кодблокс. Компилятор gcc.
#35 #511614
>>511610
А что за ось?
#36 #511619
>>511614
Мята с корицей.
#37 #511622
>>511619

>Мята с корицей


Годно?
#38 #511623
>>511622
По сравнению с виндой удобнее. С другими линуксами не сравнивал.
#39 #511626
>>511623
Чем лучше винды?
Я сам юзал убунту с юнити и опенсусе с кде. Были +, но и -.
#40 #511634
>>511626
Есть официальный репозиторий с программами. Не надо вирусов бояться. Можно легко панель задач настроить. Ярлыки вверху, открытые приложения внизу. Несколько рабочих столов. Куча легко настраиваемых плагинов. Многое можно сделать всего одной командой в консоли.
#41 #511644
>>511599
Нет, для служебной информации просто резервируются отдельные кластеры. В принадлежащих файлу все только по существу, нет указателей на следующий кластер или чего-то подобного. Только данные.
#42 #511647
поцаны, я совсем зеленый и смотрю вот у вас список литературы для нубов, да.
Я, допустим, начал с "Страуструп Б. - Программирование. Принципы и практика использования C++". Почему его нет в рекомендованных, я сильно ошибся с выбором первой книги или это дело вкуса, объясните немного, не пинайте.
#43 #511649
>>511647
Нет, не ошибся. Хорошая книга.
#44 #511656
Есть что прочитать про boost на русском, чуваки?
На документации мало на оф. сайте да и не всегда все понятно.
#45 #511657
>>511656
В документации *fix
#46 #511673
>>511647
Да не особо. Просто книжек для ньюфагов много, а у Страуструпа бывают достаточно нудные тексты, поэтому я его не включил в раздел для ньюфагов.
>>511656
http://www.solarix.ru/for_developers/cpp/boost/boost-library.shtml
#47 #511690
Поясните, вроде гуглил - пишут чтобы найти арифметический корень в спп надо использвать pow, но я пишу: pow(n, 1/2), где n =, например 9. А оно мне отвечает на любое число 1.
#48 #511706
>>511690
А теперь напиши pow(n, 1.0/2) или pow(n, 0.5) или pow(n, 1f/2)
#49 #511941
fscanf/fprintf не работаю со строками. Использую .c_str() для вывода, а что делать с вводом? Скорость не сильно уменьшается и всё ещё меньше fstream?
#50 #511945
>>511941
Блядь, ну откуда вы лезете-то? Какие нахуй printf в крестах?
Делай раз: std::ifstream file {"TvoyaMamka.txt"};
Делай два: std::string mamka;
Делай три: file >> mamka;
17 Кб, 385x229
16 Кб, 504x222
#51 #511954
>>511945
>>511945
У них большая разница в скорости. Те кто fscanf писал сделали за 60 мс, а те что fstream за 150 мс. При чём алгоритм был примерно одинаковый.

%Только что сам замерил программы с пика вышло 320 и 360 мс и fstream быстрее. Что можно вместо .c_str() делать и можно сразу оба варианта использовать?%%
13 Кб, 451x340
#52 #511955
А как сейчас относятся к исходникам, где нет разделения на .h/.cpp?
Ну т.е. если код всего класса пишется сразу в один файл, без выноса тел функций в .cpp - сильно говнокодом считается или всем похуй?

Неужели до сих пор вручную все кодят заголовки, и потом, когда решают добавить функцию в класс, рыскают по двум файлам?
#53 #511962
>>511954
В прошлом треде про это было жи. Тебе надо снять флаг совместимости с stdio.
#54 #511964
>>511955
Это у тебя продлится до первой получасовой компиляции проекта из одних заголовков.
#55 #511965
>>511955
Два файла делают тогда, когда распространяют библиотеку без исходного кода, в остальных случаях это не принципиально. Стандартная библиотека написана без разделения.
#56 #511968
>>511965

>STL


>без разделения


>T for tamplates


>без исходного кода

#57 #511970
>>511962
В стандарте http://www.cplusplus.com/reference/ios/ios_base/sync_with_stdio/ про файлы ничего не написано.
Какие подводные камни при использовании cin.tie(0)?
#58 #512001
Я вчерашний анон, который спрашивал про rvalue, скажите мне, зачем допускается такая возможность:

int&& tmp=90;
cout << std::is_rvalue_reference<decltype(tmp)>::value << '\n'; //true

Ведь по сути tmp, это обычный int и как rvalue его использовать нельзя
#59 #512009
>>511968
Ты совсем упоротый? Открой какой-нибудь list.h там будут описаны и классы и функции, если ты найдешь в стандартной библиотеке list.cpp то сообщи.
#60 #512015
>>511970
Файлы не ускоряют. Проверил. Но при выводе с printf и перенаправление вывода в файл из консоли 500 мс, а с выводом в fprinf 360.
#61 #512030
>>511941
%s и массив char. Для iostream естьпара советов, которые делают его быстрее scanf, поищи аналоги для fstream http://habrahabr.ru/post/246257/
#62 #512031
>>512030
Проверил эти советы. Но fstream они не ускоряют.
#63 #512035
>>512001
Нет, tmp это таки будет rvalue reference, сам объект 90 будет жить, пока живут ссылки на него. Другое дело, что в метод его нельзя передать, если параметр объявлен как &&, а если параметр & или по значению, то можно. Я, если честно, не совсем понял, почему так происходит, вся эта тема с rvalue оказалась глубже, чем я думал. Но абсолютно точно tmp не будет непосредственно интом в твоем случае.
#64 #512075
поясните нюфане, чем так using namespace std плох?
#65 #512077
>>512075
Ничем. Кто тебе такое сказал? Где его не надо использовать. Максимум что может произойти это конфликт имён в больших программах.
#66 #512080
поцаны, обоснуйте за assert();
Насколько мне известно, то он помогает отлаживать программы.
Но у меня возник вопрос, он умеет выводить сообщения об ошибке только в консоль или же нет. Да и ваще нужен ли он? Или нахуй не сдался, если не собираешься крупного пилить ничего.
#67 #512085
>>512035

>сам объект 90 будет жить, пока живут ссылки на него


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

>в метод его нельзя передать, если параметр объявлен как &&, а если параметр & или по значению, то можно


и инт точно также

> вся эта тема с rvalue оказалась глубже, чем я думал


Да это просто какой-то пиздец! А потом они удивляются, почему, блядь, все на яву переходят.
#68 #512101
Платиновый вопрос.

Я нуб, прочитал книгу Шилдта Базовый курс C++ (из шапки). Перед прочтением думал, что знаю плюсы, надо разве что библиотеки вроде буста и qt4 выучить. Оказалось, что вообще не знаю нихуя.

Придумайте для меня задание (проект какой-нибудь), чтобы у меня был стимул изучить актуальные библиотеки. А то скучно самому высосанные из пальца задачки решать.
#69 #512117
>>512101
Блокнот уже сделал?
41 Кб, 490x500
#70 #512124
>>512101
Напиши два драйвера для мышки: первый может передвигать указатель только в право-влево, а второй - вверх-вниз, один устанавливаешь на одну мышку, второй на вторую. Таким образом тебе чтобы навести курсор в нужное место нужно будет работать обеими руками, причем в разных плоскостях. Не благодари.
947 Кб, 500x281
#71 #512167
А как сделать, чтобы экземпляры класса могли взаимодействовать друг с другом?
Чтобы один экземпляр через свой метод мог вызывать методы другого экземпляра.
Или чтобы один экземпляр через свой метод мог менять свойства другого экземпляра.
sage #72 #512171
>>512167
Ты еще спроси, как в носу поковыряться.
#73 #512174
>>512171
Ну то есть ты не знаешь. Понятно. Подождем следующего.
#74 #512175
>>512167
>>512174
Передавай второй экземпляр в качестве аргумента и вызывай себе. Это ничем принципиально от передачи чисел и строк не отличается, то есть это правда как в носу ковыряться

мимо-не->>512171
#75 #512178
>>512167
На каком этапе у тебя возникли проблемы?
#76 #512182
>>512178
Вот на этом >>512175

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


Затупил чет. Терь просветлело. Спасибо.
#77 #512187
>>512009

>T for tamplates


>если найдешь .срр файл


Сколько хеловордов уже написал?
#78 #512199
>>512085

>но я же не могу уничтожить эту ссылку, его время жизни такое же как и у инта в этой функции


Ну, лол, так и есть. Кресты это тебе не утиный язык. Если tmp выглядит как инт и применяется как инт, то это еще не значит, что он будет инт.
#79 #512202
>>512075
Тем, что при использовании нескольких библиотек даже в небольшой программе могут перекрываться имена, в зависимости от того, какой using nsmespace сделали раньше. И такую ошибку хуй найдешь потом. Лучше написать using std::TvoyaMamka для сущностей, которые используешь, тогда, по крайней мере, ты сможешь точно знать, откуда взято имя.
#80 #512203
>>512080
Я не пользовался. Для компиляционных проверок есть static_assert, для тестирования удобнее сразу хуярить в gmock.
#81 #512206
>>512101
Напиши какую-нибудь 2D игру для джвух пользователей. Одновременно научишься в формочки, контейнеры, сетевое взаимодействие.
#82 #512207
>>512009
Мсье никогда не собирал gcc?
#83 #512209
>>512124
Как он мышки-то отличит, если они usb?
#84 #512246
>>512009
Вот я тебе открыл вектор.
http://pastebin.com/EFrJj4Ve
8 Кб, 184x274
#85 #512260
Решил для себя выучить c++, потому что я любитель таких оладий. Учу по бумажной версии "Объектно-ориентированное программирование в C++ " и дико охуеваю от количества опечаток, как понимаю такая херня только в русской версии. Но появился один интересный код, цитата
[code]
#include <iostream>
#include <cstring>
using namespace std;
////////////////////
int main() {
char str1[] = "Malen'coi yolochke holodno zimoi.";
const int MAX = 80;
char str2 [MAX];

for ( int j = 0; j <= strlen(str1); j++)
str2[j] = str1[j];
str2[j] = '\0';

cout << str2 << endl;

return 0;

}
[/code]

Компилятор g++.exe дико охуевает от происходящего и плюется ошибками. В частности строка "str2[j] = '\0';" бред сивой кобылы, ибо переменная j не работает вне области видимости цикла for. Так же "for ( int j = 0; j <= strlen(str1); j++)" по той причине что strlen(str1) возвращает unsigned значение, а компилятор не хочет сравнивать signed и unsigned.

Я ебанул вот так:
[code]
#include <iostream>
#include <cstring>
using namespace std;
////////////////////
int main() {
char str1[] = "Malen'coi yolochke holodno zimoi.";
const int MAX = 80;
char str2 [MAX];

for (unsigned int i = 0; i <= strlen(str1); i++) {
if (i < strlen(str1)){
str2 = str1;
}
else{
str2 = '\0';
}
}

cout << str2 << endl;

return 0;

}
[/code]
И два вопроса. Норм я сделал? Может я не понял дохуя хитрый ход автора в его примере?
8 Кб, 184x274
#85 #512260
Решил для себя выучить c++, потому что я любитель таких оладий. Учу по бумажной версии "Объектно-ориентированное программирование в C++ " и дико охуеваю от количества опечаток, как понимаю такая херня только в русской версии. Но появился один интересный код, цитата
[code]
#include <iostream>
#include <cstring>
using namespace std;
////////////////////
int main() {
char str1[] = "Malen'coi yolochke holodno zimoi.";
const int MAX = 80;
char str2 [MAX];

for ( int j = 0; j <= strlen(str1); j++)
str2[j] = str1[j];
str2[j] = '\0';

cout << str2 << endl;

return 0;

}
[/code]

Компилятор g++.exe дико охуевает от происходящего и плюется ошибками. В частности строка "str2[j] = '\0';" бред сивой кобылы, ибо переменная j не работает вне области видимости цикла for. Так же "for ( int j = 0; j <= strlen(str1); j++)" по той причине что strlen(str1) возвращает unsigned значение, а компилятор не хочет сравнивать signed и unsigned.

Я ебанул вот так:
[code]
#include <iostream>
#include <cstring>
using namespace std;
////////////////////
int main() {
char str1[] = "Malen'coi yolochke holodno zimoi.";
const int MAX = 80;
char str2 [MAX];

for (unsigned int i = 0; i <= strlen(str1); i++) {
if (i < strlen(str1)){
str2 = str1;
}
else{
str2 = '\0';
}
}

cout << str2 << endl;

return 0;

}
[/code]
И два вопроса. Норм я сделал? Может я не понял дохуя хитрый ход автора в его примере?
#86 #512274
>>512260
Насчет счетчика, такой код как в книге будет вроде работать с майкрософтовским компилятором. Так как ты сделал вообще не вариант, или обяви переменну счетчика перед циклом, или сохрани длину строки strlen(str1) в отдельную переменную size (например) и в цикле будет условие i < size, после цикла str2[size] = '\0';
Насчет сравнения беззнаковых с знаковыми - у тебя наверное жесткие настройки компилятора, он должен такое компилировать, просто что это UB. Ну и так как ты сделал это правильно, UB желательно не допускать, особо хитрожопые компиляторы могут вообще такой цикл выкинуть с таким сравнением как в книге.
#87 #512315
>>512246
И что? Все определено в одном файле.
#88 #512362
>>512315
Да ты что? Исхоного кода нет?
#89 #512370
>>512362
Что значит нет? Ты мои посты читал вообще? Я говорю, что сейчас цпп и х объединены, как там может не быть исходного кода?
#90 #512371
>>512207

>Мсье никогда не собирал gcc?


А нахуя? Обычно мне помогает

>pkgin install clang

#91 #512376
>>512370

>Два файла делают тогда, когда распространяют библиотеку без исходного кода


>Открой какой-нибудь list.h там будут описаны и классы и функции,

#92 #512388
>>512376
Какая часть

>Стандартная библиотека написана без разделения.


непонятна?
#93 #512389
>>512376

>Два файла делают тогда, когда распространяют библиотеку без исходного кода


ну правильно, стандартная библиотека распространяется с исходным кодом, и там один файл

>описаны


я не очень удачно выразился
#94 #512391
нуфажище итт

Какая среда для С++ лучше подходит для ньюфага(раньше кодил только на кубейсике и паскале,лол)?
#95 #512395
>>512391
Если не смущает операционная система виндоуз то Visual Studio. Альтернативные варианты Code::Blocks и Qt Creator - это из тех что проще всего навернуть. Совсем небольшие куски кода можно в ideone тестить.
#96 #512412
Анончики, а возможно ли норм кодить из под лайвсиди убунты ?
#97 #512416
>>512412
А нормально ли вообще что-то делать из под лайфсиди?
#98 #512424
>>512416
Что-то - да.
#99 #512430
>>512391
Vim + gcc, конечно же.
#100 #512486
чуваки, есть ли что-нибудь по типу книги о WinAPI или же придется вылизывать msdn и разные статейки в гугле?
#102 #512538
>>512274

>str2[size] = '\0';


А не str2[size+1], чтоб место было под этот новый символ?
Спасибо за ответ.
#103 #512543
>>512395
Нахуя ты ему визуал студио и кодеблокс посоветовал? Зачем ему такие монстры?
#104 #512547
>>512538
В индексах от 0 до size-1 находятся символы строки, по индексу size нужно вписать терминальный ноль.
#105 #512550
>>512543
А что ты новичку посоветуешь? Vim? Emacs? Студия потому-что скачал и программируешь, даже формошлепствовать можно. Кобдблокс - скачал правильную версию (с компилятором) и программируешь. Размер не сильно важен. Наберет опыта - выберет инструмент под свои цели.
#106 #512559
Кстати, вчера VS13 community поставил.
На крестах третий год уже ни строки не писал. Захотелось посмотреть, что изменилось.

Нихуя не изменилось. Разработка под C++ как была, так и осталась адскими муками. Начиная с самого малого. Вот надо мне заюзать класс из сторонней библы. Как я в других языках/IDE это делаю? Project properties > sources > add dir. Всё. Что я должен сделать в VS? То же самое плюс указать каждую папку библы в additional directories и вручную включать через include хуй знает какой хедер, чтоб этот класс появился - и так в каждый файл с кодом.
И пока не просидишь в гугле и не найдешь название хедера, в intellisense этот класс даже не появится. Т.е. приходится реально зубрить внутреннее устройство фреймворков, вместо того чтобы нажать ctrl+space, ввести часть названия класса на интуитивном уровне (Sprite, i.e.), и насладиться автодополнением в полном виде.

Может, я таки не разобрался, и есть плагины/опции студии, позволяющие избегать этого геморроя и автоматизирующие процесс?
#107 #512565
>>512559
А когда в "других IDE" ты указываешь путь, а по нему, допустим, несколько версий либы для разных сборок, ты что будешь делать-то, ммм? В VS подключение в джва действия: добавляешь папку с либой в additional headers и добавляешь пусть к самому .lib. Действий на 10 секунд, зато гибкости больше на порядок. Можно регулировать debug/release версии либы и вот это все.
#108 #512568
>>512559
В библиотеке есть TvoyaMamka.h и TvoyaBabka.h. В обоих есть классы Korzinochka с разными интерфейсами. Ты пишешь Korz без подключения хедера, что по-твоему происходит?
#109 #512582
Котаны, сижу читаю Лафоре и никак не могу понять, почему цикл из ссылки ниже не скатывается в бесконечное выполнение, а успешно завершается:

http://ideone.com/Ii3qau

Как вообще условие (-1 < 16) может вернуть false?

/на закоменченое не обращайте внимания/
#110 #512588
>>512582
((size_t)-1 < 16)

Ладно, предыдущий вопрос снимается, объясните плз почему данное выражение возвращает false
#111 #512592
>>512486
Гугли Литвиненко Н.А. - Технология программирования на С++. Win32 API-приложения. Очень хорошая книга для начинающих
#112 #512595
>>512588
Потому, что size_t — unsigned.
#113 #512596
>>511337
Проиграл.
Какой же хуйней вы занимаетесь в 2015 году.
Никогда не интересовался плюсами, ради интереса решил зайти, а тут ТАКОЕ.
#114 #512600
>>512565

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


Даже больше скажу. Обычно у меня это несколько натив расширений для андроида, iOs, библиотеки для PC, либы для веба. 4 сборки. Никаких проблем, все обрабатывается и подключается автоматически.

>добавляешь папку с либой в additional headers и добавляешь пусть к самому .lib. Действий на 10 секунд


Хех. А про прописывание ручками include в каждом файле (а их сотни)? Далеко ходить не надо - пока не пропишешь include <string>, у тебя нет доступа к классу std::string. Тогда как в том же не самом лучшем эклипсе import-ы прописываются автоматически и в intellisense показываются все (вообще все) классы.
Вот я и интересуюсь - мб можно так же в VS сделать? Похоже, нет.

>>512568
Высвечитыается список:
Korzinochka - TvoyaMamka
Korzinochka - TvoyaBabka
Выбираешь один из них (enter или вниз, enter) - эклипс сам добавляет соответствующий хедер.
#115 #512602
>>512600

>Выбираешь один из них (enter или вниз, enter) - эклипс сам добавляет соответствующий хедер


Хм. Надо будет тогда глянуть. А что там насчет отладки, можно смотреть/менять переменные? Многопоточная отладка есть?
#116 #512603
>>512596
За то мы победили
#117 #512604
>>512596

>судит о языке по вопросам ньюфагов

#118 #512607
>>512604
По ответам же.
Функцию передавать массивом байтов.
#119 #512609
>>512607
Ты вопрос о том, можно ли положить функцию в сегмент данных. Ты вот на своем питоне или на чем ты там пишешь можешь?
#120 #512611
>>512607
Какая передача функции, лол? Для нормальной работы с передачей первоклассных функторов не нужно перезаписывать код, они же энивей реализуются через указатели. А товарищ спрашивал про что-то из разряда самомодификации, исполнения стека и вот этого всего. Подобное байтоебство вообще относительно легально только в виде голого асма, никто и никогда не предоставляет таких средств жи. Тем не менее, после некоторых плясок на крестах можно такое провернуть, а вот в джаве/питоне/функциональной параше ты соснешь с такими задачами абсолютно точно.
#121 #512612
#122 #512613
>>512602
С многопоточностью не работал (игры и простые аппы пилил). Отладка норм, все смотрится и изменяется на лету, но вроде отмотки назад (intellitrace?) нет. Но это для java/as3. С крестами там, похоже, жопа еще больше, чем в VS, я час проебался с хелло вордом, но так его и не запустил. Каждые 5 минут ошибки, и на эти ошибки куча топиков в гугле, т.е. это типа так и надо. Все через жопу.

Еще мне жутко не хватает рефакторинга. В эклипсовых IDE выделяешь класс, жмешь хоткей (ctrl+shift+r), вводишь новое название - все переименовывается само - и классы и конструкторы, и файлы, и хедеры. Но уж это я надеюсь в плагинах VS найду.
#123 #512615
>>512613
Нене, рефакторинг уже завезли в VS2015, по ощущениям охуенно. Там вообще много добавили, например, графики занятой памяти и загрузки ядер. Анимированные, блядь, графики, в реалтайме, я аж теку. Только предрелизная версия не до конца вылизана, но релиз уже скоро.
#124 #512630
>>512611

>статические члены класса выделяются при старте в сегменте данных


>статические функции могут быть статическими членами класса


>значит статические функции-члены класса тоже хранятся в сегменте данных?


>НЕТ!! в сегменте данных хранятся только МАССИВЫ!!!! Сделай функцию МАССИВОМ!!!

#125 #512642
Почему сегмент стэк растёт с конца? Его можно расширить?
#126 #512645
>>512630
Речь шла про данные, сука, не путай. Только потом он про статические методы спросил. Так можно до чего угодно доебаться.
#127 #512646
>>512642
Потому что с начала в нем растет куча.
#128 #512647
>>512646
А что происходит когда они сталкиваются?
#129 #512649
>>512647
Гроб гроб кладбище пидор. Защита сработает и все вылетит к хуям.
#130 #512650
>>512649
И расширить его нельзя? Почему нужно разное количество памяти чтобы порвать стэк и кучу?
#131 #512656
>>512645
А теперь мне дураку расскажите. Например обыные переменные и указатели хранятся на стеке. А массивы типо int m[5] хранятся где? А функции как хранятся? Указатель в стеке, тело в куче?
#132 #512670
>>512650
Потому что в современных системах не используется сегментная организация памяти. Используется страничная, когда каждому процессу присваиваются определенные страницы виртуальной памяти, которая не равна по размеру аппаратной. Процесс видит только виртуальную память, причем только свои страницы, а при обращении по адресу процессорное ядро аппаратно просматривает таблицу страниц и преобразует виртуальный адрес в настоящий. Страницы тоже делятся на страницы с "данными" и "командами". Но никто не мешает дополнительно подкачать сколько угодно виртуальных страниц можно адресовать до 2^64 байт, ну ты понел, которые хранятся на диске, пока не используются. Поэтому все ограничения на размер идут не от реальных размеров сегментов, а от того, что ОС не хочет выделять процессу моар. А т.к. считается, что куче и стеку нужно разное количество памяти, то и ограничения разные.
#133 #512672
>>512656
Ну вот смотри. Ты написал программу, откомпилировал, она преобразовалась в машинный код. Когда ты запускаешь ее, загрузчик ОС берет весь код из файла и копирует в область памяти с кодом. В файле отдельно описаны статические переменные, для них загрузчик зарезервирует место в области данных. А вот все остальные переменные не требуют никаких отдельных действий загрузчика с памятью. Какое-нибудь {int a;} преобразуется в PUSH/DEC BP в самом коде, где она используется. Поэтому они и называются автоматическими, в том смысле, что они автоматически создаются самим кодом на стеке, без участия загрузчика. Массивы в этом плане ничем не отличаются.
#134 #512673
>>512672
Спасибо, все понятно
#135 #512675
>>512670
Про виртуальную память есть что почитать? Советовали лекции в которых много раз про виртуальную память упоминают, а что это не поясняют. и книгу http://ftp.vtyulb.ru/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B%20%28%D0%BC%D0%B0%D1%88%D0%B1%D1%83%D0%BA%29.pdf. Прочитать книгу достаточно чтобы понять виртуальную память или надо отдельно изучать?
#136 #512678
>>512675
Ну, я после Машечкина все кристально понял, например. Правда, когда он анально карает за пропуски лекций, а зимой хардкорный экзамен, это немного другое, чем читать книгу.
#137 #512683
ОП, почему не ведётся счёт тредов и нет архивачей?
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
#138 #512687
>>512683
Я же скромняша. Не уверен был, что кому-то это нужно будет потом. Если хотите, буду схоронять, конечно. Алсо, вообще пилите пожелания/предложения/литературу для шапки/что угодно. В новом треде тогда добавлю по реквестам.
#139 #512696
>>511601
suka pidor
#140 #512698
>>511579
В винде большие проблемы из-за codepage 866 в консоли. Надо или сохранять файл в 866, или подменять cout на что-то с конвертом, или менять шрифт в свойствах cmd.exe через alt-пробел. А в линуксах проблем не помню.
#141 #512704
>>512687

>литературу для шапки


Может Бьерне Страуструп "Программирование. Принципы и практика использования C++" в раздел для новичков?

>пожелания


Переконвертить все книги из ОП-поста в пдф, выложить прямую ссылку на файл чтобы можно было просмотреть в браузере и сократить ссылку с помощью гугла. Возможно для тебя одного это будет сложно поэтому я разберусь как это сделать и помогу.
30 Кб, 1060x189
22 Кб, 893x594
#142 #512724
Как выполнить это задание с помощью вычисление остатка.Можно ли считать что задание выполнил.
#143 #512726
>>512724

>Как выполнить это задание с помощью вычисление остатка.


if ((а % 2) == 0) { четное }
#144 #512727
>>512724
Что ты написал?
if(a%2){нечётное} else{чётное}
#145 #512729
>>512724
У страуструпа плохие упражнения.
#146 #512730
>>512729
А где хорошие?
#147 #512731
>>512730
Задачки в интернете. Их больше. Писать быстрее.
#148 #512762
>>510638

>Недавно дочитал эту книгу. Твоя первая? До неё что читал?



Вопрос к индивиду из предыдущего треда: все упражнения сделал из неё? Да, я про эту >>511647 книгу.
#149 #512766
>>512607
А почему бы и нет? Это рождает охуительный возможности по обфускации.
#150 #512768
>>512704

>Может Бьерне Страуструп "Программирование. Принципы и практика использования C++" в раздел для новичков?



Можно, но приготовьтесь жрать блины говно с лопаты.
быстрые потоки ввода / вывода fstream 1 / 2 #151 #512796
>>511954
>>512015

>std::ios::sync_with_stdio(false);



Снятие флажка синхронизации с сишными потоками ввода/вывода ускоряет <iostream> , а не <fstream> . Ещё немного платины на эту тему:

>Насколько медленны iostreams?


http://habrahabr.ru/post/246257/

А теперь о том, как собственно увеличить скорость <fstream> . Дело в том, что потоки ввода/вывода в C++ имеют кроссплатформенную реализацию, и эта реализация может с разной скоростью работать на разных операционных системах / компиляторах. Как работают потоки (since C++11): им даётся имя файла std::string и они конструируют объект типа std::fstream (например std::fstream , это уже ты решаешь), который имеет... та-дамм! Буфер для чтения и/или записи.

(продолжение следует)
быстрые потоки ввода / вывода fstream 2 / 2 #152 #512797
>>512796 Размер буфера и специфика работы с ним определяются спецификой операционной системы и колдовскими настройками компилятора, т.е. выходит за рамки кроссплатформенности в каждом конкретном случае, вследствие чего реализация скрыта внутри. Т.е. если, например, писать некий char array в файл, то выполняется двойная работа: сначала он пишется в буферный char array, потом буферный char array пишется в файл. Всё это снижает скорость в некоторых случаях более чем в 2 раза, зато гарантированно работает на любой платформе / операционной системе. Но буфер можно отключить (при помощи публичного метода), если ты уверен, что разобьёшь свой массив на подмассивы размера строго меньше либо равного размеру буфера в твоей ОС.

>std::ofstream ofs; //only writing


>ofs.rdbuf()->pubsetbuf(0, 0); //both zeros to disable buffer


>ofs.open(filename, std::ios::binary); //std::string filename



>for (std::size_t i = 0; i < n; ++i)


> fill_array(any_type_array, i);


> ofs.write(reinterpret_cast<const char*>(any_type_array), array_size); //std::streamsize array_size



Важный момент:
http://stackoverflow.com/questions/16605233/how-to-disable-buffering-on-a-stream

>If setbuf(0,0) is called on a stream before any I/O has occurred on that stream, the stream becomes unbuffered.


>... Note that some compilers (eg. gcc) see opening a file as an I/O operation on the stream, so pubsetbuf should be called before opening the file (as above).

#153 #512803
>>512797
fast fix

>for (std::size_t i = 0; i < n; ++i)


>{


> fill_array(any_type_array, i);


> ofs.write(reinterpret_cast<const char*>(any_type_array), array_size); //std::streamsize array_size


>}



Впрочем, если пишешь знаковый char_array, то всё ещё проще:

>for (std::size_t i = 0; i < n; ++i)


>{


> fill_array(signed_char_array, i);


> ofs.write(signed_char_array, array_size); //std::streamsize array_size


>}

#154 #512847
>>512704
На самом деле у меня вся литература и дохуя по крестам, не вошедшего в шапку уже есть в pdf/djvu, только заливать я не знал куда, поэтому искал по новой на книгообменниках. Вообще, годная идея же, надо тогда найти, где размещать будем это все, чтобы прямая ссылка не привязывалась к ойпи.
#155 #512849
>>512727
Но зачем, лол? if (a & 1) {нечетное} же.
#156 #512897
>>512515
Эту книку стоит читать не прочитав версию "без учёта специфики х64"
#157 #512903
>>512847
Пробовал на dropbox, но там качать неудобно. Пробовал на какой-то вечный файлообменик, но там скорость маленькая. В контакт получилось удобнее всего. Так https://vk.com/doc10903696_406254436 или https://goo.gl/43uPI1 но только пдф надо. Если боишься что кто-то про твою страницу узнает могу сам всё залить. Только выложи пдэфы которые есть чтобы самому не конвертировать.
#158 #512904
>>512903
Забыл добавить что прямая ссылка нужна была чтобы не искать кнопочку для предпросмотра. Поэтому такая тоже пойдёт.
#159 #512915
>>512796
>>512797
>>512803
Не понял. Как в этом случае выводить int, string или double?
#160 #512936
>>512915

>Как в этом случае выводить int, string или double?



Выводить куда, в файл? Там же русским по белому написано:

>for (std::size_t i = 0; i < n; ++i)


>{


> fill_array(any_type_array, i);


> ofs.write(reinterpret_cast<const char>(any_type_array), array_size); //std::streamsize array_size


>}



Если у тебя единственное int number записать надо, то, если не ошибаюсь,

>ofs.write(reinterpret_cast<const char>(&number), static_cast<std::streamsize>(sizeof(int)));



Но с С++11 можно использовать перегруженные операторы >> << и для бинарного I/O, поэтому

>std::ofstream ofs; //only writing


>ofs.rdbuf()->pubsetbuf(0, 0); //both zeros to disable buffer


>ofs.open(filename, std::ios::binary); //std::string filename


>ofs << number; //int number

#161 #512938
>>512936
Разметка говно и сожрала пару *, но где начался курсив, и где он закончился, там и сожрало.
#162 #512940
>>512936

>std::ios::binary


Это обязательно?
#163 #512943
>>512903
Во вконтаче периодически копирасты трут книги, не?
#164 #512944
>>512943
Не знаю. Можно пока так попробовать. Если что придётся на дропбокс заливать.
22 Кб, 410x279
#165 #512946
>>512936
Код с пика выполняется 800 мс, а без оптимизации 330. Что я не так делаю?
#166 #512947
>>512944
Вот мои схороненные. Нюфажеские я не схоронял, но они в шапке уже по прямым ссылкам, так что можно взять оттуда для конвертации в pdf.
http://my-files.ru/9n9v2o
16 Кб, 1332x131
#167 #512948
>>512947
Тут что-то не так со скоростью. Хотя перед контактом попробую сюда залить.
#168 #512964
>>512946

> эта цветовая схема


какой же ты поехавший блять
62 Кб, 557x298
#169 #512967
>>512947
1. Там повторяются старые и новые издания. Ничего страшного если залью только новые? Если надо будет потом старые добавлю. На пике выделил те что можно не заливать.
2. Джоссатис больше чем пол гига весит. Попробуй у себя поискать пдф поменьше, а я ещё раз в инете гляну. Если не найдём оставим то что теперь в шапке.
3. Записал годы выпуска английской версии. В интернет при поиске показывает год выхода русской версии. Может для удобства поиска их через / написать? Или это излишне?
#170 #512968
>>512964
Эта дэфолтная. Что нет так? Есть гайд по кодблоксу? Не знаю как и зачем её поменять.
16 Кб, 1317x122
#171 #512973
>>512968
http://tonsky.livejournal.com/221767.html
вот этого почитай
Алсо на пикрилейтеде моя схема. Подсвечены только идентификаторы, комментарии и текст в кавычках. Вообще не понимаю, почему по дефолту всегда и везде подсвечивается всякое говно вроде int или using, блять, в этом же вообще смысла нет.
#172 #512975
>>512968

>и зачем


Коментариями не пользуешся?
1 Кб, 115x27
#173 #512976
>>512973
У тебя цвет идентификаторов и текста в кавычках похож. А статью эту на хабре видел.
>>512975
А это тут причём? Он тоже подсвечивается.
#174 #512977
>>512976

> Он тоже подсвечивается


Ещё светлее его сделай.

> цвет идентификаторов и текста в кавычках похож


Ярко голубой и фиолетовый. Ты либо толстишь так, либо и впрямь поезавший.
1 Кб, 101x24
#175 #512979
>>512977
Так лучше? У тебя всего 3 цвета на чёрном фоне. Мог бы цвет в кавычках красным сделать для контраста.
#176 #512981
>>512979

> У тебя всего 3 цвета на чёрном фоне


Ты статью читал вообще?

> Мог бы цвет в кавычках красным сделать для контраста


Я не понимаю, он недостаточно контрастный для тебя? Сливается с фоном или что? Ты уже сетчатку себе спалил к хуям свой цветовой схемой, ничего не видишь.
#177 #512982
>>512940

>std::ios::binary


>Это обязательно?



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

>>512946

>Что я не так делаю?


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

Кто виноват? Не ты, а я, что дал глупый совет >>512936 записывать единичные int, double и небольшого размера std::string -- не подумал.

Почему этот совет подходит только для массивов среднего размера? Объясняю на пальцах: отключение буфера приводит к тому, что на каждый чих <fstream> обращается к жёсткому диску как только ему ОС предоставляет такую возможность физически. Если к жёсткому диску обращаться 100 000 раз ради нескольких байт, можно и жёсткий диск попортить при частом использовании твоей программы. Работать в любом случае будет медленно.

Что делать? Установить размер буфера равным (или делящимся нацело, если есть подозрения, что ОС не сожрёт записать такой объём за один раз) количеству итераций по записи значения * на его sizeof .

http://en.cppreference.com/w/cpp/io/basic_streambuf/pubsetbuf
http://www.cplusplus.com/reference/streambuf/streambuf/pubsetbuf/

Попробую переписать твой пример (напоминаю, что согласно стандарту char имеет вместимость 1 байт, что не факт что верно для bool, но это уже offtop):

>#include <fstream>


>#include <cstdio> //std::size_t


>#include <string>


>


>int main ()


>{


> const std::size_t n = 100000;


> char ofs_buffer[n];


> std::ofstream ofs;


> ofs.rdbuf()->pubsetbuf(ofs_buffer, n);


> std::string str = "123456789012345678901234567890";


> for (std::size_t i = 0; i < n; ++i) ofs << str;


> return 0;


>}



Подразумевая, что сто килобайт сможет записать на диск любая ОС, и мы не сломаем твой жёсткий диск. Вот сейчас ты будешь иметь sizeof str обращений к жёсткому диску (в данном случае 30, если смотреть на мой код).

Вот теперь давай измерения времени сюда с и без строчки

>ofs.rdbuf()->pubsetbuf(ofs_buffer, n);

#177 #512982
>>512940

>std::ios::binary


>Это обязательно?



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

>>512946

>Что я не так делаю?


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

Кто виноват? Не ты, а я, что дал глупый совет >>512936 записывать единичные int, double и небольшого размера std::string -- не подумал.

Почему этот совет подходит только для массивов среднего размера? Объясняю на пальцах: отключение буфера приводит к тому, что на каждый чих <fstream> обращается к жёсткому диску как только ему ОС предоставляет такую возможность физически. Если к жёсткому диску обращаться 100 000 раз ради нескольких байт, можно и жёсткий диск попортить при частом использовании твоей программы. Работать в любом случае будет медленно.

Что делать? Установить размер буфера равным (или делящимся нацело, если есть подозрения, что ОС не сожрёт записать такой объём за один раз) количеству итераций по записи значения * на его sizeof .

http://en.cppreference.com/w/cpp/io/basic_streambuf/pubsetbuf
http://www.cplusplus.com/reference/streambuf/streambuf/pubsetbuf/

Попробую переписать твой пример (напоминаю, что согласно стандарту char имеет вместимость 1 байт, что не факт что верно для bool, но это уже offtop):

>#include <fstream>


>#include <cstdio> //std::size_t


>#include <string>


>


>int main ()


>{


> const std::size_t n = 100000;


> char ofs_buffer[n];


> std::ofstream ofs;


> ofs.rdbuf()->pubsetbuf(ofs_buffer, n);


> std::string str = "123456789012345678901234567890";


> for (std::size_t i = 0; i < n; ++i) ofs << str;


> return 0;


>}



Подразумевая, что сто килобайт сможет записать на диск любая ОС, и мы не сломаем твой жёсткий диск. Вот сейчас ты будешь иметь sizeof str обращений к жёсткому диску (в данном случае 30, если смотреть на мой код).

Вот теперь давай измерения времени сюда с и без строчки

>ofs.rdbuf()->pubsetbuf(ofs_buffer, n);

#178 #512985
>>512982
Можно ещё раз. Почему размер буффера не резмер строки, а количество обращение?
#179 #512986
>>512982
В примере на котором тестировал в первый раз было не 30, а 1000 символов в строке. Теперь результат от 30 до 40 мс. Это слишком мало чтобы сравнивать. Не слишком опасно сделать размер строки 1000 символов?
#180 #512988
>>512985

>Почему размер буффера не резмер строки, а количество обращение?


Ещё раз: ты хочешь 100 000 раз обращатсья к диску? Скорость запись на диск во много раз медленнее, чем работа с оперативной памятью.

>>512986
Лучше увеличь n в 100 раз. Всё равно задаётся константой в начале кода, а размер строки сделай символов 10-30, как удобно тебе. Жду 2 скриншота кода с и без выставления буфера результаты измерений в мс.
34 Кб, 1068x310
#181 #512989
>>512988
Спасибо. Получилось. С оптимизацией за 310мс. Без оптимизации 410 мс.
#182 #512993
>>512989
Хуже может быть, только если сделать фон каким-нибудь ядовито-зелёным, например, на мой взгляд.
#183 #512999
>>512988
Кажется понял. Вместо того чтобы выводить строку в файл он пишет его в буфер. А когда буфер в оперативной памяти заполниться он его выводит в файл. Тоесть чтобы к диску меньше раз обращаться надо увеличить буфер так чтобы в него влезло больше строк. А если размер строк очень большой, то буффер надо убрать и он сразу огромную строку выведет в файл не занося повторно в память. Всё правильно понял?
>>512993
Он дэфолтный. В настройках другой схемы нет. Самому пердолить желания нет. Может потом из интета скачаю красивую цветовую схему.
#184 #513000
>>512967
1. Там самые новые, которые я нашел. Т.е., допустим, если про шаблоны 96 года, то новых изданий не было, либо я долбился в глаза и не нашел их. В таком случае буду очень признателен, если ты покажешь, где есть что-то новее моих.
2. Это ты его сконвертировал, и он таким большим стал? В djvu же всего 50 МБ. Можно файнридером его распознать, ну или оставить djvu, мне кажется, новизна издания важнее удобства/размера.
3. Да можно вообще не писать, лол. Если там будут самые новые, анон откроет файл, и в нем уже указаны все подробности, на странице, где типографская инфа.
#185 #513004
>>513000
Вдогонку: ну я же вот открыл исходную djvu, там прямо на первой странице написано про 2003 год. Ты бы тогда брал эти даты из самих файлов, а не из интернетов, изданий-то много разных, некоторым уже по двадцать лет.
#186 #513008
>>513004
Еще вдогонку: я таки долблюсь в глаза и перепутал соседние файлы. У тебя все правильно, но таки ссылки на новые издания для выделенных реквестирую.
#187 #513011
>>512989

>Спасибо. Получилось. С оптимизацией за 310мс. Без оптимизации 410 мс.


Я ожидал большего. Впрочем, какая ОС, какой компилятор? Скажи, а я поделюсь своими наблюдениями про "без буфера массивы среднего размера".

>>512999
Всё правильно понял?
Да.

Небольшое дополнение: при отключённом буфере нужно не прошляпить момент, когда в общем-то любая ОС сможет записать твой массив за один раз. 4 мегабайта, полагаю, любая современная ОС может записать за 1 раз. Ну и не забывай про всяческие sizeof, чтобы не прострелить себе ногу, ведь стандарт строго регламентирует только sizeof(char) == 1.
#188 #513018
>>512550
Dev-c++ НАчинал и не жалею. Недавно скачал видимую студию и охуел от того сколько нужно манипуляций чтобы запилить халоворлд.
#189 #513019
>>512547
Да, ты охуенен, спасибо.
Надеюсь ты увидишь мой комент и тебе станет приятно лол
71 Кб, 1154x160
62 Кб, 572x314
#190 #513065
>>513000

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


А нет таких же книг, но поновее и другого автора?

>2. Это ты его сконвертировал, и он таким большим стал? В djvu же всего 50 МБ. Можно файнридером его распознать, ну или оставить djvu, мне кажется, новизна издания важнее удобства/размера.


Тоже в инете ничего не нашёл. Заливать не буду, а возьму ссылку из шапки.

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


Так проще неверно ориентироваться в файлах. Ладно это оставлю как есть.

>>513004
Брал данные не с первой странице, а английское издание как на первом пике.

>>513008
На втором пике не они? Те же книги на ту же тему, от тех же авторов, но поновее.
24 Кб, 604x90
21 Кб, 435x242
#191 #513068
>>513011

>Я ожидал большего.


Раньше >>511954 обычный fstream без оптимизации 320 выдавал, а fprintf 360. Во всех случаях выводил 100 МБ. Теперь только больше раз выводил меньшую строку.

>какая ОС, какой компилятор?


GCC с линуксом. screenfetch почему-то не работает.
#192 #513075
>>513065

>А нет таких же книг, но поновее и другого автора?


Ну, Мейерс это своеобразный гуру, в других книжках обычно более примитивные рекомендации даются. А тут что-то на уровне собрания статей из блога, как делать лучше всего. Энивей, подобные вещи не сильно устаревают, там же нет жесткой привязки к синтаксису, так что сойдет и 2000 год, думаю. Она больше не перевыпускалась, к сожалению, но у него вышла новая книга Effective Modern C++ я ее тоже залил в архив, правда она до сентября только на ангельском будет.

>На втором пике не они? Те же книги на ту же тему, от тех же авторов, но поновее.


Нет, другие. У Саттера и Мейерса они именно дополняют первые, рассказано то, что не вошло в предыдущие. Джоссатис и Вандевурд это тоже другая, но вот она таки немного устарела уже, шаблоны сильно обновили в новом стандарте. Можно ее не включать, думаю.
57 Кб, 640x278
#193 #513082
>>513075
Заливать то что на пике? Теперь не могу, но сегодня начну. Завтра закончу. И одним постом отчитаюсь. Если ссылки через гугл сокращу лучше будет? Они же вечно работают?
#194 #513176
>>513068

>Раньше >>511954 обычный fstream без оптимизации 320 выдавал, а fprintf 360. Во всех случаях выводил 100 МБ. Теперь только больше раз выводил меньшую строку.



Вот теперь я вообще ничего не понял. Ты мне вот этот код >>512989 , его же с закомменченными 8 и 10 строкой, и сишную запись в файл. Хотелось бы увидеть три цифорки с миллисекундами.

>GCC с линуксом


А, ну ожидаемо, что ручной оптимизацией ты выиграл (410-310)/310 = 32%, это не так плохо. В винде-то всё ещё деревяннее.

Это я к тому, что в винде при записи средних и больших массивов при отключённом буфере делается всё с мало-мальски приличной скоростью, т.е. практически запись в файл перестаёт быть бутылочным горлышком. С дефолтным конструктором при записи больших и средних массивов скорость записи падает... пожалуй, в десятки раз.
33 Кб, 1088x299
33 Кб, 1069x296
37 Кб, 1077x325
36 Кб, 1024x323
#195 #513184
>>513082
>>513176

>с закомменченными 8 и 10 строкой


Забыл 8 закоментить. Теперь он 400 мс работает.

> и сишную запись в файл


Нет. Эти измерения делал раньше.

Провёл все измерения снова и получилось:
1. Без оптимизация пик 400 мс
2. Оптимизация буфером 310 мс
3. Вывод в стиле С с помощью .c_srt() 430 мс
4. Вывод в стиле С с помощью С-строки 410 мс
12 Кб, 568x83
#196 #513186
>>513184
Может как-то не так проверяю? Делаю как на пике и смотрю на real.
#197 #513196
>>513184
Ну, в ходе твоих измерений выяснили, что fstream твёрдо быстрее си, хоть с оптимизациями, хоть без. У тебя же вроде была претензия изначально, что fstream медленнее работает, если я правильно понял?

>У них большая разница в скорости. Те кто fscanf писал сделали за 60 мс, а те что fstream за 150 мс. При чём алгоритм был примерно одинаковый.

#198 #513201
>>513196
Да. Сам не понял. Начальные измерения с чужих задач на кодфорсе. И те кто писали в стиле С делали быстрее. На кодфорсе надо делать вывод в стандартный поток, а он сам его в файл перенаправляет. Но при очной олимпиаде вывод надо делать в файл самому и комп будет на винде. К этому я и хотел подготовиться. Есть что почитать на эту тему оптимизация fstream с помощью регулирования размер буфера в интернете?
#199 #513211
>>513082
Да, вроде заебись. Прошу прощения за слоуответ.
#200 #513212
>>513211
Минут через 15 закончу заливать на dropbox ещё через 10 проверю и сокращу ссылки и через 5 вброшу в тред. Через полчаса всё будет.
#201 #513216
Вроде готово. Что ещё туда добавить?

https://goo.gl/e1V5BC Александреску - Современное проектирование на языке C++(2002)
https://goo.gl/HdELHy Джосаттис Н.М. - Стандартная библиотека C . Справочное руководство(2012)
https://goo.gl/uImH0J Мейерс - Effective Modern C++ (англ.)(2015)
https://goo.gl/tHa0tO Мейерс - Наиболее эффективное использование C++(1996)
https://goo.gl/wsDXGz Мейерс - Эффективное использование C++(2005)
https://goo.gl/QtS8Dc Мейерс - Эффективное использование STL(2002)
https://goo.gl/4nn512 Саттер - Новые сложные задачи на C++(2004)
https://goo.gl/iWaa6S Саттер - Решение сложных задач на C++(2002)
https://goo.gl/Cpk4YR Саттер, Александреску - Стандарты программирования на C++(2005)
https://goo.gl/FqbPwo Страуструп - Дизайн и эволюция C++(1994)
https://goo.gl/iZBDiV Страуструп - Язык программирования C++(2010)
https://goo.gl/qJfBkD Уильямс - Параллельное программирование на C++ в действии(2012)
#202 #513218
>>513216
Когда будешь в шапку заносить на всякий случай предупреди что если попросит регистрацию то надо закрыть окошко и нажать "скачать" снова.
#203 #513220
>>513216

>Джосаттис Н.М. - Стандартная библиотека C . Справочное руководство(2012)


Опечатка. Нужно С++. Там исправил. В шапке тоже поправь.
#204 #513285
Прогану нужно написать на чистом си прогу используя либу libpcaps, которая анализирует паекты согласно заданому требованию, например порт, айпи, мак. Нужно выводить в файл список всех маков пакетов, количество пакетов связаных с заданым маком. Список всех айпи пакетов, количество тисипи и юдипи.
Прога под никсы, с байндингом бод eth0.
Подскажите, с чего нечать. А то я только пол годна на плюсах, а в си полный ноль.
91 Кб, 1116x778
#205 #513289
Репостну вопрос из ньюфаг тренда, вдруг здешний анон знает:

"Кто-нибудь использует code::blocks?

Не могу понять как заставить окно Wathces появляться автоматически во время дебага. Т.е начинаю отладку и нужно каждый раз лезть debug->debuging windows -> wathces.

И еще не могу изменять в вотчах элементы массива, пик. Как тут программировать вобще. Хотел эту иде как замену Студии. "
#207 #513319
>>513201

>И те кто писали в стиле С делали быстрее. На кодфорсе надо делать вывод в стандартный поток, а он сам его в файл перенаправляет.


не вижу смысла обсуждать чёрный ящик.

>Но при очной олимпиаде вывод надо делать в файл самому и комп будет на винде. К этому я и хотел подготовиться.


Измерения ты провёл, решай сам.

>Есть что почитать на эту тему оптимизация fstream с помощью регулирования размер буфера в интернете?


Лучше почитай на тему винды, какой у неё максимальный и/или оптимальный по скорости буфер записи на жёсткий диск. Дальше сам знаешь что делать.
#208 #513323
Какие можете посоветовать книги жавакодеру? Нет смысла мне читать книги, в которых всё описывается с нуля.

>>513289
Я бы на твоём месте на CLion перекатился. Если она такая же как и идея - вообще годнота.
#209 #513347
>>513319
Спасибо. Очень твои ответы помогли.
#210 #513350
>>513347
Единственное что, если у тебя много свободного времени, разберись, как в сишечке отключается буфер / выставляется буфер и его размер. Там ведь абсолютно та же кухня (только, очевидно, без ООП), что и в iostream. Что будет быстрее, ну мне было бы очень интересно знать, просто времени и сил не так много.

Т.е. можешь провести дополнительные измерения с оптимизацией fprintf или что там в си, я не знаю. Если сделаешь -- можешь сюда написать, я читаю C++ треды (все остальные треды не читаю).
#211 #513351
>>513350

>Там ведь абсолютно та же кухня (только, очевидно, без ООП), что и в iostream.



fastfix: что и в <fstream>
#212 #513358
>>513216
Еще выше был кун, который просил впилить книгу Страуструпа для нюфагов, ее бы неплохо добавить к тем трем. Но у меня ее нет, нагуглил только какое-то говно в .chm.
#213 #513359
>>513220
Ссылка умерла.
#214 #513368
>>513359
https://goo.gl/PEyiMH Джосаттис Н.М. - Стандартная библиотека C++. Справочное руководство(2012)

>>513358
Нашёл в djvu уже конвертирую.
#215 #513382
https://goo.gl/87qXtW Страуструп - Программирование. Принципы и практика использования C++(2009)
#216 #513395
>>513350
Нашёл setvbuf и setbuf, но пока не понял их отличия. Также нашёл в описании это предложение.

> Буфер записывается на физическое устройство каждый раз, когда встречается символ новой строки


Заменил в строке вывода последний символ на \n, но результат почти без изменений. Также узнал что по умолчанию размер буфера для вводы/вывода в стиле С у меня 8192.
28 Кб, 1028x288
27 Кб, 1031x283
#217 #513407
>>513350

На первом пике 310 мс, а на втором 360. Как так ещё не понял. Первый пик выводит буфер в файл после заполнения, а второй пока не понял.
#218 #513413
>>513407
Лучшие результаты C и C++ одинаковые -- 310 мс. Тебе необходим замер на большие количества данных (например, чтобы писалось минуты), может там разница будет.

Если, конечно, ты уверен, что I/O будет самым узким бутылочным горлышком в твоей олимпиаде.
#219 #513416
>>513413
После рассказа об возможном повреждении HDD боюсь увеличивать размер файла. Если буду выводить в /dev/null результаты можно сравнивать?
27 Кб, 1021x270
33 Кб, 1065x292
#220 #513419
>>513416
Только что проверил. В обоих случаях 100 мс.
#221 #513421
>>513416
Ещё раз проясню: возможное повреждение HDD у тебя могло быть на этом этапе (цитирую тебя):

>512985


>Можно ещё раз. Почему размер буффера не резмер строки, а количество обращение?



Если же будешь писать крупными кусками (буфер намного больше, чем переменные. которые ты пишешь), ничего не станется. Фильмы ты не боишься на свой компьютер копировать?

>Если буду выводить в /dev/null результаты можно сравнивать?


Тебе нужно ставить физический эксперимент с записью на жёсткий диск. Ну ты понял.
31 Кб, 1047x281
#222 #513424
>>513421
Тоесть нужно увеличить n? Он выдаёт ошибку про сегментацию память или что-то в это роде.
#223 #513428
>>513424
Ну вот, видимо, экспериментально и подобрались к ограничению твоей сейчасшней ОС на максимальный буфер записи жёсткого диска.

Тогда делаешь так, как я говорил раньше: n оставляешь таким, чтоб не было segmentation fault, делаешь буфер, и вводишь дополнительную переменную m = n * 100; например, чтобы получить в 100 раз более долгий эксперимент по времени.

>for (... i < m; ...)



И так для фпринтфа и для фстрима.

P.S. Вангую отличие результатов не более чем на 5%.
#224 #513432
>>513419
Кстати, здесь на втором скрине, я так понял, обе строчки должны быть раскомменчены, раз результат очень быстрый.
#225 #513436
>>513432
Да. Это я не ту программу протестировал.
>>513428
Очень странно запускаю с 8382052 и всё работает примерно 10 сек. Второй раз запускаю и ошибка. Ничего страшного если n будет 8000000?

Теперь нужно чтобы количество циклов было больше размера буфера? Может в 10 раз будет достаточно, а то 1000 сек. Я не прожду.
#226 #513442
>>513436

>Очень странно запускаю с 8382052 и всё работает примерно 10 сек. Второй раз запускаю и ошибка. Ничего страшного если n будет 8000000?



Ну сделай вдвое меньше, я не знаю, 4000000. Это 4 мегабайта (4194304), как я и предлагал в самом начале:

>513011


>4 мегабайта, полагаю, любая современная ОС может записать за 1 раз



>Теперь нужно чтобы количество циклов было больше размера буфера?


Очевидно. Нам же неплохо бы посмотреть это на чуть более длительной записи.

>Может в 10 раз будет достаточно, а то 1000 сек. Я не прожду.


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

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

>#include <iostream>


>#include <fstream>



А если есть #include <iostream> , то в целях скорости я уже никогда не использую сишный I/O, и поэтому всегда пишу в самом начале int main() {

>std::ios::sync_with_stdio(false);


...
}

вот об этом стоит помнить. А то люди проигрывали олимпиады из-за медленных std::cin / std::cout
#227 #513444
>>513442

> почему уже такие тупые вопросы спрашиваешь?


Чтобы быть уверенным что всё правильно делаю. Долго всё по много раз проверять.
#228 #513447
>>513444

>Долго всё по много раз проверять.


Здесь тебе так и так проверять придётся, ты лучше меня знаешь, какие объёмы данных тебе придётся писать.

Ну и вообще, про экстраполяцию слыхал?

И отчего жёсткий диск попортиться может, в конечном итоге понял или нет?
#229 #513449
>>513447

>про экстраполяцию слыхал?


Нет, но скоро посмотрю что это.

>>513447

>И отчего жёсткий диск попортиться может


От того что много раз меленькие объёмы данных записывать?

Проверил быстрые fstream средняя скорость 1 мин. 18 сек.
28 Кб, 1069x287
#230 #513451
>>513449
Забыл добавить что 8 гигов буфером в 8 магабайт строку из 100 символов 80000000 раз выводил.
28 Кб, 1016x263
#231 #513457
Вывод в стиле С 1 мин. 20 сек.
#232 #513464
>>513449

>От того что много раз меленькие объёмы данных записывать?


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

>Проверил быстрые fstream средняя скорость 1 мин. 18 сек.


>Забыл добавить что 8 гигов буфером в 8 магабайт строку из 100 символов 80000000 раз выводил.



Сравнение с сишечкой давай при тех же параметрах.
#233 #513466
>>513464
Параметры те же. Разница пара процентов. >>513457
#234 #513467
>>513466
Кресты победили!

Расхождение менее 5%, как я и предсказывал. Ну решай сам, что тебе больше по душе. С учётом >>513442 , если выберешь C++ .
#235 #513468
>>513467
Со string удобнее работать проще. Думаю теперь проведу ещё пару тестов с другими типами. Где искать советы по оптимизации программы без изменения её алгоритма?
#236 #513471
>>513468

>Со string удобнее работать проще. Думаю теперь проведу ещё пару тестов с другими типами.



Можешь влететь по производительности, если не будешь делать с reinterpret_cast<const char> и низкоуровневой функцией записи ofs.write(arr, arr_streamsize);

подробно я описал тут:

>512797 >512803 (быстрее этого уже не будет ничего):



>std::ofstream ofs; //only writing


>ofs.rdbuf()->pubsetbuf(0, 0); //both zeros to disable buffer


>ofs.open(filename, std::ios::binary); //std::string filename



>for (std::size_t i = 0; i < n; ++i)


>{


> fill_array(any_type_array, i);


> ofs.write(reinterpret_cast<const char>(any_type_array), array_size); //std::streamsize array_size


>}



std::streamsize -- это знаковый аналог std::size_t , в него легко кастовать статик_кастом

Кстати, почему в своих программах ты нигде не используешь std::size_t для индексов и разметки памяти? Стандарт, как-никак.
#237 #513473
>>513471
Пидорашенная разметка. Ну ты понял, где начинается курсив, там первая * , где заканчивается курсив, там вторая.
#238 #513474
>>513471
Я не понимать. Что это? Что оно должно делать?
#239 #513475
>>513474
Английский нормально знаешь?
#240 #513476
>>513475
Нет.
#241 #513477
Насколько вообще востребовано знание платформы .Net Framework на рынке труда?

Есть ли смысл учить .Net зная лишь С++/CLI?

Обязательно ли учить С#?
#242 #513482
>>513476
Тогда выписываешься из своей маленькой хрущёвки и поселяешься на http://ru.cppreference.com/w/

Параллельно учишь английский, потому что база статей на русском там весьма неполна (почти все машинный перевод) и, кроме того, частенько на http:://www.cplusplus.com , хоть это и не официальный сайт, бывают более адекватные, полные и более ясные для понимания примеры.

начни-ка с http://ru.cppreference.com/w/cpp/io/basic_ostream/write

Хотя при полном незнании английского языка я бы всё равно предпочёл
http://www.cplusplus.com/reference/ostream/ostream/write/?kw=write

НЕ ЗАБЫВАЙ ПЕРЕКЛЮЧАТЬСЯ НА ВКЛАДКУ C++11 , по умолчанию не она

Но моим примеры более понятные для понимания. Что такое reinterpret_cast <const char*>? Это указание компилятору, чтобы он думал, что там массив типа char, так ещё и указание конст чтоб не менять его. Обманываем компилятор и правильно делаем, ради скорости.
#243 #513484
>>513477
В чем вопрос то?
.net без сишарпа есть, но его мало.
Учить вообще ничего не надо, работать надо.
24 Кб, 449x305
24 Кб, 429x291
25 Кб, 531x303
25 Кб, 481x289
#244 #513486
1. long 95 мегабайт 1 250 мс. fstream
2. float 55 мегабайт 9 780 мс. fstream
3. long 95 мегабайт 1 650 мс. fprintf
4. float 46 мегабайт 4 230 мс. fprintf

>>513482

>НЕ ЗАБЫВАЙ ПЕРЕКЛЮЧАТЬСЯ НА ВКЛАДКУ C++11 , по умолчанию не она


А как включить? И как проверить или включён?
60 Кб, 1280x484
#245 #513497
>>513486

>А как включить? И как проверить или включён?


См. приложенный пик.

>1. long 95 мегабайт 1 250 мс. fstream 2. float 55 мегабайт 9 780 мс. fstream


>3. long 95 мегабайт 1 650 мс. fprintf 4. float 46 мегабайт 4 230 мс. fprintf


Ну, собственно, о чём я и предполагал >>513471 ещё до твоих измерений: при работе НЕ с чарами fstream ожидаемо проигрывает.

Поэтому нужно использовать непосредственно низкоуровневую функцию std::ostream::write() с враньём компилятору при помощи reinterpret_cast<const char *>, что мы пишем чары, а на деле пишем какой-то другой массив или даём ссылку на переменную.
#246 #513498
>>513497
Хотя именно лонг оказался быстрее. Видимо, зашили реинтерпрет_каст в переопределённый оператор << для лонгов.
#247 #513499
>>513497

>См. приложенный пик.


А, ты пр ту ссылку. Думал что ты про компилятор.>>513497

>что мы пишем чары, а на деле пишем какой-то другой массив или даём ссылку на переменную.


Если там будет к примеру 2 байта unsigned short(12), а мы скажем что там чар. То он вместо "12" выведет 2 байта преобразовав их в чар. Тоесть char(0) и char(12). Разве нет? Не в интернет статья по этой теме?
#248 #513505
>>513499
В интернет нешёл что пишут у прата про это хорошо поясняется. Это так? Стоит отрывок из его книги читать?
#249 #513514
>>513499

>Думал что ты про компилятор.


Компилятор у тебя просто последней версии должен быть, тогда всё в порядке с C++11.

Так, последние два сообщения я уже не уверен, устал. >>513497 >>513498 (вот эти)

По поводу ансигнед шорт. Если тебе нужно записать её n раз, тогда будет так (@ везде замени на *):

>#include <fstream>


>#include <cstdio> //std::size_t


>


>int main ()


>{


> const std::size_t n = 100000, n_size = n @ sizeof(unsigned short);


> char ofs_buffer[n_size];


> std::ofstream ofs;


> ofs.rdbuf()->pubsetbuf(ofs_buffer, n_size);


> unsigned short twelve = 12;


> std::streamsize var_streamsize = static_cast<std::streamsize>(sizeof(unsigned short));


>


> for (std::size_t i = 0; i < n; ++i)


> ofs.write(reinterpret_cast<const char@>(&twelve), var_streamsize);


>


> return 0;


>}



Т.е. в буфер она запишется n раз, а на жёсткий диск всё вместе запишется 1 раз. Обрати внимание, что в реинтерпрет_каст я скармливаю &twelve, т.е. ссылку (грубо -- адрес переменной, т.е. подаю её как массив якобы чаров длиной 2 элемента чара).
#249 #513514
>>513499

>Думал что ты про компилятор.


Компилятор у тебя просто последней версии должен быть, тогда всё в порядке с C++11.

Так, последние два сообщения я уже не уверен, устал. >>513497 >>513498 (вот эти)

По поводу ансигнед шорт. Если тебе нужно записать её n раз, тогда будет так (@ везде замени на *):

>#include <fstream>


>#include <cstdio> //std::size_t


>


>int main ()


>{


> const std::size_t n = 100000, n_size = n @ sizeof(unsigned short);


> char ofs_buffer[n_size];


> std::ofstream ofs;


> ofs.rdbuf()->pubsetbuf(ofs_buffer, n_size);


> unsigned short twelve = 12;


> std::streamsize var_streamsize = static_cast<std::streamsize>(sizeof(unsigned short));


>


> for (std::size_t i = 0; i < n; ++i)


> ofs.write(reinterpret_cast<const char@>(&twelve), var_streamsize);


>


> return 0;


>}



Т.е. в буфер она запишется n раз, а на жёсткий диск всё вместе запишется 1 раз. Обрати внимание, что в реинтерпрет_каст я скармливаю &twelve, т.е. ссылку (грубо -- адрес переменной, т.е. подаю её как массив якобы чаров длиной 2 элемента чара).
42 Кб, 1038x436
#250 #513517
>>513514
Почему не используешь скрипт для [CODE]?
И всё же я не понимаю. Ведь переменные разных типов хранятся в память по разному. Откуда он знает как их переводить в другой тип? И ещё. Программа с примера в файл записывает байты, а не символы.
#251 #513520
>>513484

>>Учить вообще ничего не надо, работать надо.



Не траль, плиз.
#252 #513522
>>513514
Что такое streamsize?
#253 #513527
>>513517
Скрипт не использую, потому что смотри соседний тред про Столярова Андрея Викторовича у меня помирающий компьютер, ещё не хватало навешивать всяческие плагины на браузер. Я вообще сторонник веб 1.0.

>Откуда он знает как их переводить в другой тип?


Он их не переводит в другой тип, он подряд расположенные байты в памяти воспринимает как другой тип. Реинтерпрет_каст на этапе выполнения кода ~почти всегда является бесплатной операцией.

Константу я навесил чтобы подчеркнуть read-only характер действия в отношении памяти.

>>513522

>Что такое streamsize?


Я кому ссылку на вики дал?

http://ru.cppreference.com/w/cpp/io/streamsize
http://www.cplusplus.com/reference/ios/streamsize/

Стримсайз -- это размер в байтах того, что пишешь за один раз с помощью write() . Знаковый тип, обращаю внимание, поэтому не std::size_t
#254 #513529
>>513527

>Он их не переводит в другой тип, он подряд расположенные байты в памяти воспринимает как другой тип. Реинтерпрет_каст на этапе выполнения кода ~почти всегда является бесплатной операцией.


Значит он полезен только при выводе string? Ведь другие типы совсем не так представляются в памяти как массив char. Значит другие типы никак не ускорить?

>Я кому ссылку на вики дал?


Там по предложения про это. По чему отдельный тип? Почему не int?
#255 #513531
>>513529

>другие типы совсем не так представляются в памяти как массив char


Структуры так представляются, например.
#256 #513533
>>513531
А как это поможет с их правильным и быстрым выводом?
#257 #513534
>>513529

>Ведь другие типы совсем не так представляются в памяти


Другие типы в оперативной памяти лежат в количестве sizeof(T) байт, а представляет их себе уже компилятор с помощью дополнительной информации о типе. Когда ты говоришь компилятору реинтерпретировать их, он забивает на информацию об их типе и реинтерпретирует их так, как ты скажешь. Главное, чтобы размер T и размер реинтерпретируемого совпадали, иначе КРОВЬ КИШКИ ГОВНО ПО СТЕНАМ.

>Значит другие типы никак не ускорить?


Я >>513514 тебе n раз unsigned short записал, вообще-то. Ты издеваешься или что?

>По чему отдельный тип? Почему не int?


int это самый быстрый целочисленный тип на твоей платформе. Обычно 32 бита (долго объяснять, это фишка x86-64), ранее 16 бит.

std::size_t и std::streamsize это максимальные по разрядности типы (соответственно unsigned и signed) на твоей платформе. Т.е. 64 бита на 64-разрядном процессоре (кроссплатформенные определения типов).

Вне зависимости от разрядности процессора именно эти типы используют для индексации и разметки памяти (std::size_t) и для *stream библиотек (std::streamsize).
#258 #513535
>>513533
Выводом куда именно? Если в файлы, то по легенде, M$ Word их так прямо в файлы и бросал.
ulong rc = write (файл, смещение, структура, sizeof (тип));
#259 #513537
>>513534

> тебе n раз unsigned short записал


Я не не предупредил думал что это и так понятно нужно не в бинарном виде или как эта правильно называется, а в виде символов. Так чтобы можно было открыть блокното7м и увидеть "12". Тоесть чтобы это сделать нужно знать как тип храниться в памяти и самом преобразовывать его к char?
#260 #513547
>>513537
тогда:

1) исправь

>ofs.open(filename, std::ios::binary); //std::string filename


на

>ofs.open(filename); //std::string filename


чтобы НЕ открывало в бинарном режиме;

2) не забывай о разделителе -- char delimiter -- ты же должен разделять данные пробелом, например;

3) размер буфера не нужно подгадывать чтоб был кратным количеству записей, если неизвестно, что данные одинаковые;

4) используй << в цикле for

P.S. Будет медленно в любом случае по сравнению с бинарным, но доверь

>преобразовывать его к char


стандартной библиотеке, она сделает это лучше тебя.
#261 #513554
>>513547
ну и да, надеюсь ты понимаешь, что размер буфера всё равно должен быть достаточно большим, чтобы выгружать записи на жёсткий диск реже, но бОльшими порциями
#262 #513557
>>513547
Тоесть просто сделать буффер и не как не преобразовывать выходные данные? Как тут >>513486? А строку выводить Как в твоём примере?
#263 #513567
>>513557
Я понять не могу, ты издеваешься или что? Я пошагово тут >>513547 всё расписал.

>А строку выводить Как в твоём примере?


Возьми строку "abc", два раза запиши её в файл.

Если файл будет 6 байт, значит, делимитером надо ставить char delimiter = '\0'; (т.н. null-char, который обозначает окончание строки).

Если файл будет больше 6 байт, там автоматически проставится '\0'. Но так не будет, мне кажется.
#264 #513576
>>513567
Ты видимо уже устал пояснять. Спасибо. Всё что не понял перечитаю заново и нагуглю. Ещё раз спасибо.
#265 #513652
>>511955

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


не, зачем, автоматизация этого - одна из базовых опций любого рефакторного плагина любой ide
#266 #513653
>>511337

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


в машкодах вообще то должна быть функция уже
#267 #513941
>>513653
Она будет записана в сегменте кода, а нужен сегмент данных.
#268 #514020
Крестопетухи должны страдать.
#269 #514059
Есть знатоки QT, нужна помощь.
sage #270 #514084
>>514059
Есть, но тебе, хуесосу, не помогу.
#271 #514091
>>514084
А зачем отписался?
sage #272 #514099
>>514091
Чтобы ты спросил.
#273 #514102
>>514099
Ясно.
#274 #514118
Керниган и Ритчи же норм книга? браток подогнал. Хочу перед вузиком хоть чему-то обучиться, чтобы не обосраться.
#275 #514130
>>514118
Если перед вузиком то норм. Книга хорошая но она старая, и там не плюсы же.
#276 #514162
Ньюфаг вкатывается к крестогосподам. Есть два реквеста:
1) Посоветуйте годную литературу по Qt. Или исключительно Qt Documentation курить?
2) В одном из прошлых тредов анон выкладывал со своими пояснениями список литературы и каналы на ютубе, там ещё помечал их типа LEVEL 1, LEVEL 3 и т.д. Может схоронил кто-нибудь?
#277 #514172
#278 #514173
>>514162

PS. Половину этого я тестил, другую половину собирал по рекомендациям.
=====================================================
Books:
[LEVEL1] http://www.math.spbu.ru/user/dlebedin/cpp1.pdf – методичка по VS 2010 C++ СПбГУ. (чтобы перейти к следующей части методички изменить цифру после cpp)
[LEVEL1] http://aco.ifmo.ru/el_books/applied_programming/ - конспекты ИТМО
[LEVEL1] http://www.ozon.ru/context/detail/id/31315281/ - Страуструп
[LEVEL1] http://www.ozon.ru/context/detail/id/5410595/ - Лафоре ООП в С++
[LEVEL1] http://www.ozon.ru/context/detail/id/1498452/ - Шилдт справочник по С++
[LEVEL3] http://www.ozon.ru/context/detail/id/31619787/ - Qt программирование
[LEVEL3] http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-3rd/dp/020189551X/ref=sr_1_1?s=books&ie=UTF8&qid=1431380343&sr=1-1 – ООП Гради Буча
Courses:
[LEVEL1] http://ru.yasno.tv/course/details/programming-start – Введение в язык
[LEVEL1] http://loftblog.ru/category/courses/osnovy-oop-na-s/ – Основы ООП С++
[LEVEL3] https://ru.coursera.org/instructor/~214 – Алгоритмы на C++
[LEVEL1] https://stepic.org/users/31 и https://www.lektorium.tv/speaker/2941 – Курсы Александра Смаля
[LEVEL1] https://stepic.org/users/12 и https://www.lektorium.tv/speaker/2678 – Курсы Александра Куликова
[LEVEL2] https://www.edx.org/bio/deepak-b-phatak – Курсы C++ программирования (минимум C++)
[LEVEL1] http://www.amse.ru/courses/cpp2/ - АСП по C++
=====================================================
YouTube channels:
[LEVEL1] http://www.youtube.com/playlist?list=PL2F919ADECA5E39A6 – С++ с основ
[LEVEL2] http://www.youtube.com/playlist?list=PL2D1942A4688E9D63 – C++ Qt с основ
[LEVEL3] http://www.youtube.com/view_play_list?p=9D558D49CA734A02 – Стэнфордские лекции по программированию (не только C++)
=====================================================
Sites:
[LEVEL1] http://acmp.ru/index.asp?main=tasks – Онлайн контестер с легкими задачами
[LEVEL2] http://www.boost.org/ - Boost библиотеки
[LEVEL2] http://www.amazon.com/gp/bestsellers/books/9045760011/ref=zg_b_bs_9045760011_1 – Популярные книги по C++
[LEVEL1] http://hyperpolyglot.org/ - Сравнивание языков программирования (быстрый переход с другого языка)
[LEVEL1] http://www.cplusplus.com/reference/ - Справочник по всем стандартным библиотекам C++ (можно просто вбивать в поиск запросы)
[LEVEL1] http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 – Конспекты ИТМО
[LEVEL1] https://msdn.microsoft.com/ru-ru/library/3bstk3k5.aspx – MSDN справочник по C++
[LEVEL1] http://stackoverflow.com/questions/tagged/c%2b%2b или http://ru.stackoverflow.com/questions/tagged/c%2b%2b – задаем вопросы по С++
=====================================================
Contests and algorithms:
[LEVEL1] http://acm.timus.ru/ - Архив задач для решения и редкие контесты
[LEVEL2] http://www.spoj.com/ - Архив задач на английском
[LEVEL3] http://www.sanfoundry.com/1000-cpp-algorithms-problems-programming-examples/ - алгоритмы и приемы на C++
[LEVEL2] http://algolist.manual.ru/ - Описание известных алгоритмов (устарел)
[LEVEL2] http://codeforces.com/ - Контесты + новости о больших контестах
[LEVEL2] http://www.topcoder.com/community/events/ - Еще одни контесты
[LEVEL3] https://www.hackerrank.com/calendar – расписание известных контестов
[LEVEL3] https://contest.yandex.ru/contest-list/ – контесты от Яндекса
[LEVEL3] http://cups.mail.ru// – Mail.ru cups (не только спортивное программирование)
[LEVEL4] https://code.google.com/codejam – контесты от google
[LEVEL4] http://icpc.baylor.edu/worldfinals/problems – задачи финалов чемпионата мира по программированию
=====================================================
Forums:
http://rsdn.ru/forum/cpp
http://www.cyberforum.ru/cpp/
http://www.cplusplus.com/forum/
http://www.qtcentre.org/forum.php
https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&q=c%2B%2B+forum – другие запросы гугла

Забыл http://e-maxx.ru/algo/

Использовать сверху вниз.
https://www.youtube.com/playlist?list=PLbmlzoDQrXVFC13GjpPrJxl6mzTiX65gs или http://www.youtube.com/playlist?list=PL2F919ADECA5E39A6 или https://tech-mail.ru/materials/video/
http://www.itmathrepetitor.ru/zadachi-po-programmirovaniyu/
http://www.ozon.ru/context/detail/id/5410595/
http://hyperpolyglot.org/cpp

Затем ответвление в софт или спортивное программирование.

Софт:
http://www.amazon.com/Professional-C-Marc-Gregoire/dp/1118858050/ref=sr_1_2?s=books&ie=UTF8&qid=1431362511&sr=1-2&keywords=professional+programming+c%2B%2B
http://www.amazon.com/Game-Programming-All-Jonathan-Harbour/dp/1598632892/ref=sr_1_1?s=books&ie=UTF8&qid=1431362593&sr=1-1&keywords=game+programming+all+in+one
https://youtube.com/devicesupport

Спорт:
http://e-maxx.ru/algo/
Дасгупт, Кормен, Орлов, Техносфера.
http://codeforces.com/
http://www.topcoder.com/
#278 #514173
>>514162

PS. Половину этого я тестил, другую половину собирал по рекомендациям.
=====================================================
Books:
[LEVEL1] http://www.math.spbu.ru/user/dlebedin/cpp1.pdf – методичка по VS 2010 C++ СПбГУ. (чтобы перейти к следующей части методички изменить цифру после cpp)
[LEVEL1] http://aco.ifmo.ru/el_books/applied_programming/ - конспекты ИТМО
[LEVEL1] http://www.ozon.ru/context/detail/id/31315281/ - Страуструп
[LEVEL1] http://www.ozon.ru/context/detail/id/5410595/ - Лафоре ООП в С++
[LEVEL1] http://www.ozon.ru/context/detail/id/1498452/ - Шилдт справочник по С++
[LEVEL3] http://www.ozon.ru/context/detail/id/31619787/ - Qt программирование
[LEVEL3] http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-3rd/dp/020189551X/ref=sr_1_1?s=books&ie=UTF8&qid=1431380343&sr=1-1 – ООП Гради Буча
Courses:
[LEVEL1] http://ru.yasno.tv/course/details/programming-start – Введение в язык
[LEVEL1] http://loftblog.ru/category/courses/osnovy-oop-na-s/ – Основы ООП С++
[LEVEL3] https://ru.coursera.org/instructor/~214 – Алгоритмы на C++
[LEVEL1] https://stepic.org/users/31 и https://www.lektorium.tv/speaker/2941 – Курсы Александра Смаля
[LEVEL1] https://stepic.org/users/12 и https://www.lektorium.tv/speaker/2678 – Курсы Александра Куликова
[LEVEL2] https://www.edx.org/bio/deepak-b-phatak – Курсы C++ программирования (минимум C++)
[LEVEL1] http://www.amse.ru/courses/cpp2/ - АСП по C++
=====================================================
YouTube channels:
[LEVEL1] http://www.youtube.com/playlist?list=PL2F919ADECA5E39A6 – С++ с основ
[LEVEL2] http://www.youtube.com/playlist?list=PL2D1942A4688E9D63 – C++ Qt с основ
[LEVEL3] http://www.youtube.com/view_play_list?p=9D558D49CA734A02 – Стэнфордские лекции по программированию (не только C++)
=====================================================
Sites:
[LEVEL1] http://acmp.ru/index.asp?main=tasks – Онлайн контестер с легкими задачами
[LEVEL2] http://www.boost.org/ - Boost библиотеки
[LEVEL2] http://www.amazon.com/gp/bestsellers/books/9045760011/ref=zg_b_bs_9045760011_1 – Популярные книги по C++
[LEVEL1] http://hyperpolyglot.org/ - Сравнивание языков программирования (быстрый переход с другого языка)
[LEVEL1] http://www.cplusplus.com/reference/ - Справочник по всем стандартным библиотекам C++ (можно просто вбивать в поиск запросы)
[LEVEL1] http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 – Конспекты ИТМО
[LEVEL1] https://msdn.microsoft.com/ru-ru/library/3bstk3k5.aspx – MSDN справочник по C++
[LEVEL1] http://stackoverflow.com/questions/tagged/c%2b%2b или http://ru.stackoverflow.com/questions/tagged/c%2b%2b – задаем вопросы по С++
=====================================================
Contests and algorithms:
[LEVEL1] http://acm.timus.ru/ - Архив задач для решения и редкие контесты
[LEVEL2] http://www.spoj.com/ - Архив задач на английском
[LEVEL3] http://www.sanfoundry.com/1000-cpp-algorithms-problems-programming-examples/ - алгоритмы и приемы на C++
[LEVEL2] http://algolist.manual.ru/ - Описание известных алгоритмов (устарел)
[LEVEL2] http://codeforces.com/ - Контесты + новости о больших контестах
[LEVEL2] http://www.topcoder.com/community/events/ - Еще одни контесты
[LEVEL3] https://www.hackerrank.com/calendar – расписание известных контестов
[LEVEL3] https://contest.yandex.ru/contest-list/ – контесты от Яндекса
[LEVEL3] http://cups.mail.ru// – Mail.ru cups (не только спортивное программирование)
[LEVEL4] https://code.google.com/codejam – контесты от google
[LEVEL4] http://icpc.baylor.edu/worldfinals/problems – задачи финалов чемпионата мира по программированию
=====================================================
Forums:
http://rsdn.ru/forum/cpp
http://www.cyberforum.ru/cpp/
http://www.cplusplus.com/forum/
http://www.qtcentre.org/forum.php
https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&q=c%2B%2B+forum – другие запросы гугла

Забыл http://e-maxx.ru/algo/

Использовать сверху вниз.
https://www.youtube.com/playlist?list=PLbmlzoDQrXVFC13GjpPrJxl6mzTiX65gs или http://www.youtube.com/playlist?list=PL2F919ADECA5E39A6 или https://tech-mail.ru/materials/video/
http://www.itmathrepetitor.ru/zadachi-po-programmirovaniyu/
http://www.ozon.ru/context/detail/id/5410595/
http://hyperpolyglot.org/cpp

Затем ответвление в софт или спортивное программирование.

Софт:
http://www.amazon.com/Professional-C-Marc-Gregoire/dp/1118858050/ref=sr_1_2?s=books&ie=UTF8&qid=1431362511&sr=1-2&keywords=professional+programming+c%2B%2B
http://www.amazon.com/Game-Programming-All-Jonathan-Harbour/dp/1598632892/ref=sr_1_1?s=books&ie=UTF8&qid=1431362593&sr=1-1&keywords=game+programming+all+in+one
https://youtube.com/devicesupport

Спорт:
http://e-maxx.ru/algo/
Дасгупт, Кормен, Орлов, Техносфера.
http://codeforces.com/
http://www.topcoder.com/
#280 #514188
>>514173
>>514177
Добра тебе. Пусть всё у тебя будет хорошо.
#281 #514233
>>512595
Нет. Стандарт этого не гарантирует.
#282 #514269
[code lang="c++"]int x = 0;[/code]

Проба
#283 #514271
[code lang="c++"]int x = 0;[/code]

Проба2
#284 #514272
[CODE]int x = 0;[/CODE]
57 Кб, 650x866
#285 #514311
Антоны, привет. Я, конечно, понимаю, что лабы идут нахуй, но здесь вопрос, скорее, в другом. Есть годный пак заданий для С++? Буду благодарен, если ткнёте носом.
sage #286 #514339
>>514311
Борду напиши. Мне нужна конкуренция.
#287 #514385
>>514255
Компиляторы идут вместе с иде. А вообще, лучше ставь visual studio.
#288 #514393
>>514385
Но у меня Linux.
#289 #514400
>>514393
Qt creator. Необязательно на куте писать даже
#290 #514484
>>514424
Не похуй. Community.
#291 #514516
>>514488
Потому что сперма.
#292 #514554
>>514488
Локаль подключи
112 Кб, 570x476
#293 #514611
>>514339
Абу, ты?
#294 #514635
>>511337
А такое возможно на уровне пхп? Там же тоже можно тело функции в base64 зашифровать, в массив положить, а потом запустить.
#295 #514648
>>514488
Посмотри настройки консоли.
100% кодировка не та стоит.
220 Кб, 1432x929
sage #296 #515040
>>514611
Нет, у меня получше сосача будет. Только для мобилок дизигн просасывает. А так почти все функции куклы есть искаропки (спеллы в том числе), кроме совсем бессмысленных (ну типа там пробел после > вставлять при цитировании).
Еще это говно без учета скорости передачи (на локалхосте тестил) держит до 70к постов без картинок в час, или до 30к с картинками, или до 20к тредов.
Есть минималистичный режим, где не используются скрипты, но многие функции работают (такие как добавление файла к посту или редактирование поста (который отмечен как черновик и пока что другим посетителям не виден)).
Тег code, опять же, поддерживается без костылей. Ссылки на посты с других досок.
Есть и уникальные фичи (сомнительной полезности, но все же). Все описывать лениво. В общем, без лишней скромности, движок збс получился, мне нраица. Народу только нет, потому как агрессивно спамить-пиарить совесть не позволяет (и лень тоже).
#297 #515097
Эй анон, что ты скажешь про движок UDK4 с его крестами?

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

И как вообще, легко будет жабабляди пересесть на плюсы организовав по этому поводу вменяемо архитектуру стратегии с непрямым управлением?

Алсо, что скажешь о поиске пути? Именно по этой причине были выбраны плюсы. Советуй, анон.
#298 #515250
Сап, погромисты. Вот думаю посмотреть, попробовать сделать что-нибудь на wxWidgets. Стоит вообще или лучше сразу на Qt?
sage #299 #515324
Лучше сразу на хуй.
#300 #515334
>>515250
Попробуй, сделай. wxWidgets -весьма неплохая штука, лично для меня вполне удобная.
Однако, делать что-либо на Милашке, как мне кажется, быстрее и проще.
#301 #515399
Анон, направь меня на путь истинный! Я хочу обмазаться сетевым программированием, и у меня возникла пара вопросов:

1. Какие есть библиотеки, и стоит-ли их использовать? Я посмотрел на программирование уровня сокетов и не нашел там чего-то очень сложного, а библиотека типа boost.asio, на первый взгляд показалась мне более запутанной.

2. В чем смысл использования асинхронных сокетов в винде, если я могу запустить синхронный в отдельном потоке?
#302 #515409
>>515334

> на Милашке


На чем?
#303 #515413
>>515409
Игра слов: QT - [КьюТи].
Cutie - [кьюти] - милашка
sage #304 #515418
>>515399

>Какие есть библиотеки, и стоит-ли их использовать?


Разные, некоторые - да, некоторые - нет. Я только boost::asio использовал

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


Ну, есть немного, но мне норм.

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


В том что асинхронные не требуют целый поток на одного клиента.
#305 #515419
>>515413
а ок
#306 #515424
>>515418
А в чем преимущество asio, кроме мультиплатформенности? Я посмотрел, интерфейс сокетов в винде и никсах похожий, написать к ним универсальное междумордие можно довольно быстро.
#307 #515491
Ананасы, вот у меня вопрос такой.
Иногда где-то в примерах натыкаюсь на такие вещи, а именно делают шаблонные структуры, но без каких-либо функций или переменных в них. Ну то есть просто пустая структура.
Ещё замечал, что это делается для метапрограммирования.
Можно какой-то краткий пример для объяснения?
#308 #515542
>>515491

> Андрей Александреску - Современное проектирование на C++ - http://www.proklondike.com/var/file/C/Andrei_Alexandrescu_-_Sovremennoe_Proectirovanier_CPP.rar



Наверни вот это. Там этих примеров, тысячи их.
#309 #515565
>>515542
Проще было бы найти в гугле чем в этом говне мамонта.
#310 #515569
>>515565
+
Я тоже не понимаю, почему его все советуют.
#311 #515579
>>515040
Сделай предпросмотр постов.
#312 #515630
>>515491
Пустые структуры часто используют как тег, пустой тип. Такие типы запрещают implicit casting. Гугли tag dispatching.
sage #313 #515631
>>515424

>А в чем преимущество asio, кроме мультиплатформенности?


Готовая, хорошая либа использующяя идеоматический с++.

>>515424

>Я посмотрел, интерфейс сокетов в винде и никсах похожий, написать к ним универсальное междумордие можно довольно быстро.


Ну так напиши, жалко что-ли.
#314 #515650
Что делают С++ программисты на работе? Смотрю hh.ru и там много QT разработчиков программ и игр. И не очень много программистов по iOS/Android. Много кстати на линукс. Неужели они так востребованы? Какая мне светит работа после того как кресты выучу?
#315 #515652
>>515650

>умение писать простейшие модули ядра


Что кстати за умение? Как его получить?
#316 #515658
Архитектурный вопрос, плюсаны.

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

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

Как вообще реализуют подобные вещи? Тот же Майнкрафт как-то это делает...
577 Кб, 1762x1035
sage #317 #515664
>>515579
Ты про пикрелейтед?
#318 #515667
>>515664
Нет. Чтобы посмотреть свой пост перед подправкой и потом не редактировать если с разметкой проебался.
#319 #515668
>>515658
Фабрика же. У фабрики статический метод который принимает параметром тип нужного тайла (название тайла, или номер), создает и возвращает его. При добавлении нового тайла тебе нужно будет скомпилить класс этого тайла и фабрику. Соответвенно пересобрать все с новыми файлами. Поэтому не совсем понятно что именно ты имеешь ввиду под "не перекомпиляя". Если тебе нужно добавление новых типов тайлов вообще без перекомпиляции, только путем изменения каких=то конфигов/скриптов то твоя архитектура не подойдет. Под тайл нужен один класс, наследование не подойдет.
46 Кб, 945x562
107 Кб, 1415x243
34 Кб, 610x542
sage #320 #515671
>>515667
Есть. Система черновиков. Ставишь галку при отправке, пост на доске видишь только ты. Можно редактировать сколько угодно, пока не снимешь галку. После этого редактировать нельзя.
#321 #515675
>>515671
После того как уберёшь галочку время отправки какое будет?
sage #322 #515677
>>515675
Точно не помню, но скорее всего изначальное. Должно быть время последнего редактирования, да?
26 Кб, 729x444
#323 #515679
>>515677
Где черновик?
#324 #515680
>>515677
Это ты скрипт для [CODE] сделал?
#325 #515689
Аноны,помогите хоть тут
>>515523 задание соответственно на С++
Там в ответах гляньте рассуждения и чего нибудь наворотите
sage #326 #515690
>>515679
Введи любой пароль вверху, по нему сервак идентифицирует. Без пароля невозможно будет узнать, кому можно показать пост, а кому нет. В базе не хранится, только в куках.
>>515680
Да.
#327 #515700
Сап. Анон, поясни за кое-какие мелочи. Сможешь?
#328 #515701
>>515668
Хмм... А зачем тогда вообще прикручивают скриптовые движки, если нет возможности заставить класс-наследника вести себя так, как хочется?
#329 #515703
>>515700
Сам понял что спросил?
#330 #515706
>>515701
Не используют наследование. Скрипты настраивают существующие классы, а не создают новые.
#331 #515708
>>515703
Это был риторический вопрос, наверное.
Можно ли работать с интернетом из-под консоли?
Что за библиотеки подключать, и что почитать про этому поводу?
#332 #515709
>>515704
А проблема в чем? И вообще странный выбор, впервые слышу о таком.
#333 #515711
>>515708
QT или boost и будет тебе интернет из по консоли.
#334 #515715
>>515708
Гугли "http programming c++"
#335 #515716
>>515711
Какие возможности?
#336 #515717
>>515706
Хмм... Я вроде видел, как при моддинге Don't Starve создавали нового моба методом создания нового класса.
#337 #515718
>>515715
Там будет уже для приложений вин32, вангую
#338 #515722
>>515716
Разные. От регулярных выражений до кнопочек и окошек.
#339 #515732
>>515722
Ну допустим, я хочу сделать элементарно запрос на вывод времени. Как это сделать вообще? Нужно обращаться к серверу, запрашивать данные. Как это все делается?
#340 #515733
>>515732
Разве чтобы время узнать нужен интернет?
#341 #515740
>>515733
А если я хочу точное время с сервера шиндавс? Ну это просто для примера. Вот поясни мне за это
#342 #515744
>>515740
Тогда тебе туда https://2ch.hk/pr/res/514112.html
sage #343 #515745
>>515740
Придется переустановить драйвер биоса.
#344 #515746
>>515744
Нахуй мне питон, если я хочу на спп это делать?
#345 #515748
>>515745
Говна въебал.
Есть же встроенная утилита синхронизации времени с серверами. Не думаю, что на питоне написано
#346 #515750
>>515746
C++ Для этого не предназначен. Проще на питоне.
#347 #515751
>>515750
Почему же?
Хочешь сказать с++ не может в синхронизацию?
#348 #515753
>>515751
Может. Но тебе перед этим нужно сам С++ выучить за 21 день. Питон быстрее учится.
#349 #515756
>>515753

>Но тебе перед этим нужно сам С++ выучить за 21 день


Тонкий юморок кодеров?
Хочу си. Не знаешь как - так и говори
#350 #515760
>>515756

> Не знаешь как - так и говори


Да. Ты прав. Я не знаю как такое делать. Это же время в консольки из интернета смотреть.
#351 #515761
Собираюсь начать читать Лафоре. Книга старая. Какие могут быть подводные камни?
#352 #515764
>>515760
Если тебе не нравится так, то лови идею.
Кончолько быстро чекает время с сервера, сверяет его с системным. Если неправильно - исправляет. Так лучше?
sage #353 #515765
Залетный чухан разбушевался. Посикал в его гнилой ротешник.
#354 #515767
А как скачать XML файлик с сервака и пропарсить его, найти определенный тег, из него прочитать текст, это будет логин. По этому логину найти этого пользователя и открыть его страничку.
Это всё на QT
#355 #515769
>>515764
Это тоже не умею делать. Самому стало интересно как.
#356 #515770
>>515767
QXmlSimpleReader
#357 #515773
>>515769
Просто я уже говорил, что в шиндавс есть встроенная утилита синхронизации с сервером (несколько на выбор). Суть та же, но это надо заходить, искать, выбирать сервер. Проще же было бы просто запустить консольную приложку, которая просто даст тебе на выбор сервер, и настроит твое время на +4 по Гринвичу.
#358 #515774
>>515770
QNetworkAccessManager manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply
)), this, SLOT(fileIsReady(QNetworkReply)) );
manager->get(QNetworkRequest(QUrl("http://example.com/your.xml")));
...
void fileIsReady( QNetworkReply
reply)
{
QTemporaryFile temp_file;
temp_file.write(reply->readAll());
}

И дальше этот темп_файл запихнуть в ХмлСимплРидер?
#359 #515775
>>515774
Агась. Там юзаешь property и hasProperty.
#360 #515777
>>515775
Не понял этого. Это для проверки имени файла?

Алсо, я вроде уже понял как это сделать, но просто не хватает навыка программирование чтоб это всё вписать в программу :(
#361 #515779
Знатоки слились? Никто не может пояснить за интернет в консоли?
#362 #515781
Переформулирую свой вопрос. Есть основной движок на плюсах, в котором есть типовые объекты (например, Tile). У каждого из них есть типовые функции, для тайла -- инициализация, апдейт (шаг его жизни, грубо говоря), реакция на наступание на него и т.д.

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

Собственно, вопрос: насколько это вообще реально и как это можно реализовать?
#363 #515787
Привет, меня зовут Кирил. Я хочу сделать игру, суть такова:
- графика на SFML
- интерфейс на Qt
Внимание вопрос: это вообще законно?
#364 #515788
>>515787
А зачем тебе, собственно, пилить графониум на SFML, если ты и так юзаешь Qt?
#365 #515790
>>515788
Я с ним более знаком это раз.
Там есть специфические функции это два.
#366 #515791
>>515781
Прикручивают интерпретаор какого-то скриптового языка, часто это lua, так как есть небольшие библиотеки. Наверное для питона есть, хотя хуй знает. Потом через этот интерпретатор вызывают код на скриптах. У Qt есть свой скриптовый язык, правда не знаю можно на нем сдедать такое.
#368 #515795
>>515791
А можешь для того же Lua, например, найти ссылку, где описывается такое вот создание наследников скриптами и их интеграция? Я только по настройке скриптами смог маны найти.

В Кьюте есть метапрограммирование, которое в это потенциально может, но как же не хочется с ним возиться.
#369 #515798
>>515790
Имхо, проще все-таки писать целиком на Кьюте, потому что не придется мешать два разных стиля программирования. Но я сам с графониумом именно по Кьюту знаком.
#370 #515804
>>515795
Никаких наследников. Нельзя добавить новый класс без перекомпиляции. У тебя один класс тайла. Для каждого вида тайла создаешь свой файл скриптов, там функции/переменные с одинаковыми именами, разными реализациями. В конструкторе тайла передаешь имя нужного файла с скриптами., в зависимости от типа тайла. Когда нужно что-то сделать класс дергает функции из своего файла.
#371 #515807
>>512370
Долбаеб, реализацию шаблонных классов нельзя вынести в отдельный .СРР файл по правилам языка C++. Пиздец, как же смешно было читать твои комментарии.
#372 #515809
>>515795
Попробуй порыться здесь https://eliasdaler.wordpress.com/ Ильюша там делает то что ты хочешь, неуверен конечно там там написано именно то что тебе нужно, при беглом осмотре там только lua скрипты, может в туториалах он там нормально поясняет.
#373 #515821
>>515818
Затем, что auto rate = 12345F.
Или i = cake + 12.5F
#374 #515827
>>515818
1/2 == 0
1f/2 != 0
#375 #515829
>>515822
Задавай вопросы. Мы тут кормим людей, а не прожевываем, чтобы сплюнуть им в рот.

Ты не знаешь, что такое auto? Или не понимаешь, что суммирование флота и инта это не то же самое, что суммирование двух флотов?
#376 #515836
>>515818>>515828
Потому что в первой строке у тебя double, который при присвоении приводится к float.
То есть твой код на самом деле эквивалентен этому:
float a = (float) (12345);
float b = 12345F;
В такой виде разницы нет. Но вот добавим умножение к числу на границе точности float: http://ideone.com/4hHqqe
sage #377 #515849
>>515807

>Долбаеб, реализацию шаблонных классов нельзя вынести в отдельный .СРР файл по правилам языка C++. Пиздец, как же смешно было читать твои комментарии.


https://msdn.microsoft.com/en-us/library/by56e477.aspx
#378 #515898
>>515773
Ну ты и ебанутый, это NTP называется
Обычно ntp клиент есть в линупсах искаропки
#379 #515899
>>515779
Что тебе, блядь, конкретно то надо?
#380 #515919
Здравствуйте, у меня возникла не понятная ошибка с которой я не могу справиться и не могу понять откуда она возникла.

visual studio 2015

1>dexmath.h(465): error C2280: '_4matrix::_4matrix(const _4matrix &)': attempting to reference a deleted function
1>dexmath.h(484): note: compiler has generated '_4matrix::_4matrix' here

.h
class D_EXPORT _4matrix
{
public:
_4matrix
(
_point m00, _point m01, _point m02, _point m03,
_point m10, _point m11, _point m12, _point m13,
_point m20, _point m21, _point m22, _point m23,
_point m30, _point m31, _point m32, _point m33
);
_4matrix(void);

static _4matrix identity(void)
{
return _4matrix();
}

inline static _4matrix zero(void)
{
return _4matrix(
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f
);
}

union
{
_4point d_4p32[4];
_point d_p32[4][4];
_32un d_u32[4][4];
};
};

.cpp
_4matrix::_4matrix
(
_point m00, _point m01, _point m02, _point m03,
_point m10, _point m11, _point m12, _point m13,
_point m20, _point m21, _point m22, _point m23,
_point m30, _point m31, _point m32, _point m33
)
{
d_p32[0][0] = m00;
d_p32[0][1] = m01;
d_p32[0][2] = m02;
d_p32[0][3] = m03;

d_p32[1][0] = m10;
d_p32[1][1] = m11;
d_p32[1][2] = m12;
d_p32[1][3] = m13;

d_p32[2][0] = m20;
d_p32[2][1] = m21;
d_p32[2][2] = m22;
d_p32[2][3] = m23;

d_p32[3][0] = m30;
d_p32[3][1] = m31;
d_p32[3][2] = m32;
d_p32[3][3] = m33;
}

_4matrix::_4matrix(void)
{
d_p32[0][0] = 1;
d_p32[0][1] = 0;
d_p32[0][2] = 0;
d_p32[0][3] = 0;

d_p32[1][0] = 0;
d_p32[1][1] = 1;
d_p32[1][2] = 0;
d_p32[1][3] = 0;

d_p32[2][0] = 0;
d_p32[2][1] = 0;
d_p32[2][2] = 1;
d_p32[2][3] = 0;

d_p32[3][0] = 0;
d_p32[3][1] = 0;
d_p32[3][2] = 0;
d_p32[3][3] = 1;
}
#380 #515919
Здравствуйте, у меня возникла не понятная ошибка с которой я не могу справиться и не могу понять откуда она возникла.

visual studio 2015

1>dexmath.h(465): error C2280: '_4matrix::_4matrix(const _4matrix &)': attempting to reference a deleted function
1>dexmath.h(484): note: compiler has generated '_4matrix::_4matrix' here

.h
class D_EXPORT _4matrix
{
public:
_4matrix
(
_point m00, _point m01, _point m02, _point m03,
_point m10, _point m11, _point m12, _point m13,
_point m20, _point m21, _point m22, _point m23,
_point m30, _point m31, _point m32, _point m33
);
_4matrix(void);

static _4matrix identity(void)
{
return _4matrix();
}

inline static _4matrix zero(void)
{
return _4matrix(
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f
);
}

union
{
_4point d_4p32[4];
_point d_p32[4][4];
_32un d_u32[4][4];
};
};

.cpp
_4matrix::_4matrix
(
_point m00, _point m01, _point m02, _point m03,
_point m10, _point m11, _point m12, _point m13,
_point m20, _point m21, _point m22, _point m23,
_point m30, _point m31, _point m32, _point m33
)
{
d_p32[0][0] = m00;
d_p32[0][1] = m01;
d_p32[0][2] = m02;
d_p32[0][3] = m03;

d_p32[1][0] = m10;
d_p32[1][1] = m11;
d_p32[1][2] = m12;
d_p32[1][3] = m13;

d_p32[2][0] = m20;
d_p32[2][1] = m21;
d_p32[2][2] = m22;
d_p32[2][3] = m23;

d_p32[3][0] = m30;
d_p32[3][1] = m31;
d_p32[3][2] = m32;
d_p32[3][3] = m33;
}

_4matrix::_4matrix(void)
{
d_p32[0][0] = 1;
d_p32[0][1] = 0;
d_p32[0][2] = 0;
d_p32[0][3] = 0;

d_p32[1][0] = 0;
d_p32[1][1] = 1;
d_p32[1][2] = 0;
d_p32[1][3] = 0;

d_p32[2][0] = 0;
d_p32[2][1] = 0;
d_p32[2][2] = 1;
d_p32[2][3] = 0;

d_p32[3][0] = 0;
d_p32[3][1] = 0;
d_p32[3][2] = 0;
d_p32[3][3] = 1;
}
#381 #515923
>>515828
Здесь никакой разницы нет, потому что ты явно указываешь, что переменная a относится к типу float. Разница возникает в тех случаях, когда компилятор может об этом не догадаться.

Фигня в том, что float это примерное представление числа с некоторой точностью. И из-за этого могут возникать неприятные косяки. Например, 1234567891.1F - 1234567890.0F = 0, а не 0.1F.
#382 #515924
>>515923

> Помимо этого, фигня в том


Obvious fix.
#383 #515935
>>511121
Парни вот поясните за указатели на функцию. Что это? Пока в моем нубо представление, это указатель на возвращаемый функцией объект.
#384 #515940
>>515935
Поясни, что ты имеешь в виду?
std::function?
#385 #515943
>>515940
Вот у Праты пример(стр 359, 6 издание)
const double f1(const double ar[], int n);
const double
(p1)(const double , int) = f1;

Что это значит? Почему называется указатель на функцию? Почему не называть просто указатель на возвращаемый объект?
#386 #515944
>>515943
блять хз как сделать звездочки
const double(звездочка) f1(const double ar[], int n);
const double(звездочка) ((звездочка)p1)(const double(звездочка) , int) = f1;
sage #387 #515958
>>515944
Че не понятно то? Это указатель на место в памяти, где хранится функция. Разыменуешь его и можно будет эту функцию вызвать.
#388 #515961
>>515919
Какая из этих строок 465?
Сейчас ему не нравится, что где-то неявно должен вызываться не объявленный в классе copy constructor
#389 #515967
>>515849
Ой дибииил
#390 #516055
http://pastebin.com/MBR3VmQS

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

"QObject::connect: No such signal QNetworkAccessManager::finished(reply) in ..\ATrey\mainwindow.cpp:104
QObject::connect: (receiver name: 'MainWindow')".
Помогите, пожалуйста.
#391 #516107
>>511121
Лафоре лет 10. Стоит читать?
sage #392 #516115
>>516055
Ебать ты даун.

>QNetworkAccessManager::finished(reply)


>reply


Замени на имя тип. Вроде bool там.
#393 #516120
>>515961
Да нашёл в
union
{
\t_4point d_4p32[3];
\t_point\td_p32[4][4];
\t_32un\td_u32[4][4];
};

_4point это класс

union data
{
\t_4point d_4p32[3];
\t_point\td_p32[4][4];
\t_32un\td_u32[4][4];

\t~data()
\t{
\t}
};

Но нет, так всё сломалось буду отдельную структуру делать
#394 #516123
>>516120

>~data()


>{


>}


Ты уверен что всё правильно?
#395 #516135
>>515677

>Должно быть время последнего редактирования, да?


Естественно. Ведь все остальные увидят в момент последнего редактирования. А что я там в формочке писал, вообще неважно, мог ведь и не отправить.
#396 #516139
>>516123
Нет) так лучше будет.

typedef struct
\t{
\t\tunion
\t\t{
\t\t\t_point d_p32[4];
\t\t\t_32un d_u32[4];
\t\t};
\t} _4point_dat;

\ttypedef struct
\t{
\t\tunion
\t\t{
\t\t\t_4point_dat d_4p32[4];
\t\t\t_point d_p32[4][4];
\t\t\t_32un d_u32[4][4];
\t\t};
\t} _4matrix_dat;

class D_EXPORT _4matrix
\t{
\tpublic:
\t\t_4matrix
\t\t(
\t\t\t_point m00, _point m01, _point m02, _point m03,
\t\t\t_point m10, _point m11, _point m12, _point m13,
\t\t\t_point m20, _point m21, _point m22, _point m23,
\t\t\t_point m30, _point m31, _point m32, _point m33
\t\t);
\t\t_4matrix(void);

\t\tinline ~_4matrix(void)
\t\t{
\t\t}

\t\tstatic inline _4matrix identity(void)
\t\t{
\t\t\treturn _4matrix();
\t\t}

\t\tstatic inline _4matrix zero(void)
\t\t{
\t\t\treturn _4matrix(
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f,
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f,
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f,
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f
\t\t\t);
\t\t}

\t\t_4matrix_dat data;
\t};
#396 #516139
>>516123
Нет) так лучше будет.

typedef struct
\t{
\t\tunion
\t\t{
\t\t\t_point d_p32[4];
\t\t\t_32un d_u32[4];
\t\t};
\t} _4point_dat;

\ttypedef struct
\t{
\t\tunion
\t\t{
\t\t\t_4point_dat d_4p32[4];
\t\t\t_point d_p32[4][4];
\t\t\t_32un d_u32[4][4];
\t\t};
\t} _4matrix_dat;

class D_EXPORT _4matrix
\t{
\tpublic:
\t\t_4matrix
\t\t(
\t\t\t_point m00, _point m01, _point m02, _point m03,
\t\t\t_point m10, _point m11, _point m12, _point m13,
\t\t\t_point m20, _point m21, _point m22, _point m23,
\t\t\t_point m30, _point m31, _point m32, _point m33
\t\t);
\t\t_4matrix(void);

\t\tinline ~_4matrix(void)
\t\t{
\t\t}

\t\tstatic inline _4matrix identity(void)
\t\t{
\t\t\treturn _4matrix();
\t\t}

\t\tstatic inline _4matrix zero(void)
\t\t{
\t\t\treturn _4matrix(
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f,
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f,
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f,
\t\t\t\t0.0f, 0.0f, 0.0f, 0.0f
\t\t\t);
\t\t}

\t\t_4matrix_dat data;
\t};
sage #397 #516144
>>516135
Да, ты прав, седня с утреца уже сделал.
#398 #516146
>>516107
Так что скажите?
#399 #516154
>>516115
http://doc.qt.io/qt-5/qnetworkaccessmanager.html#finished

Я просто не могу понять, оно ведь хочет чтоб передавали обьект QNetworkReply.

connect(manager, SIGNAL(finished(QNetworkReply)),this, SLOT(replyFinished(QNetworkReply)))

И эта строка говорит, что если манагер сделал свою работу, он занес ее в REPLY и дальше, в REPLYFINISHED, мы уже работаем с этим реплаем.

Кароче хуйня какая то получается у меня.
#400 #516157
>>516146
TheprogramminglanguageCLecturesandexercises6thEditionPrata
Я вот это читал. Там и резюме в конце каждой главы и вопросы контрольные + задачки для решения.
#401 #516163
>>516157
Там про хорошо ООП поясняют? Ниразу его раньше не видел.
#402 #516164
>>516163
Думаю что да.
#403 #516165
>>516164
Тогда спасибо.
#405 #516200
11 стандарт совместим с предыдущим? 98ым? почему так долго не было нового? Если я программу на 98ом апишу, то на 11ом она тоже пойдёт?
#406 #516274
>>516200
98->11 совместим
11->98 не совместим
#407 #516275
>>516200
Был ещё 2003. Собсно, основной сейчас.
#408 #516279
>>516274
Спасибо. Это и хотел узнать.
>>516275
Почему не 11ый основной сейчас?
#409 #516443
>>516433
Return:
A value different from zero (i.e., true) if indeed c is a lowercase alphabetic letter. Zero (i.e., false) otherwise.

А почему - надо читать сорцы.
#410 #516451
>>516279
Я имею в виду в коммерческой разработке. Многие вынуждены поддерживать старые компиляторы.
А вообще уже c++14.
1553 Кб, 480x272
#411 #516664
Анон, есть задача: поток x запускает другие потоки, не более N, соответственно когда один из этих потоков завершен, он может запустить новый и т.д. Можно сделать примерно так:

void f(atomic_int cnt) { cnt--; }

А здесь код выполняющийся в потоке x:

int max_thread(4);
atomic_int cnt(0);
while (true) {
if (cnt.load()<max_thread) {
++cnt;
thread t(f,&cnt);
t.detach();
}
this_thread::sleep_for(chrono::seconds(1)); //промежуток для примера
}

Но меня здесь напрягает цикл и sleep_for, собственно вопрос: можно-ли это сделать более эффективно?
#412 #516666
>>516664
f, конечно, принимает указатель.
#413 #516670
>>516666
google: c++ event semaphore
#414 #516687
Почему rand() дает одно и то же число при каждом запуске программы?
#415 #516689
>>516687
Потому что seed одинаковый. Нужно еще srand() вызывать.
#416 #516691
>>516689
Поясни
#417 #516692
>>516691
rand() это детерминированый алгоритм который получает на вход число (seed - скрыто в дебрях стандартной библиотеки) и возвращает другое число, напервый взгляд никак не связаное. В качестве seed исползуется чило возвращенное rand() последний раз. А так как при запуске программы вызывов rand() еще небыло, там записано какое-то число по умолчанию, всегда одинаковое. Используя srand() можно вписать другой seed и получить другую последовательность псевдослучайных чисел.
#418 #516727
>>516670
А есть ли какое-нибудь более переносимое решение?
#419 #516746
>>516692
То есть вместо rand мне просто писать srand? Как там с оформлением?
#420 #516750
>>516746
Нет. Ты вызываешь srand однажды и инициализируешь, например, временем. Тут есть простой пример: http://en.cppreference.com/w/cpp/numeric/random/rand
#421 #516751
>>516746
http://www.cplusplus.com/reference/cstdlib/rand/
Используешь srand с временем и будет тебе каждый раз новое число.
Вся суть #422 #516781

> Sams Teach Yourself C++ in 10 Minutes (2nd Edition)


http://www.amazon.com/dp/0672324253

Customers Who Viewed This Item Also Viewed:

>Passion Natural Water-Based Lubricant - 55 Gallon


http://www.amazon.com/dp/B005MR3IVO
#423 #516899
Народ, объясни нубу почему этот код выдаёт 02, а не 0?

http://pastebin.com/83WWQ69y
#424 #516901
>>516899
break;забыл
#425 #516902
>>516901
Блять x_X
Уже заметил. Надо спать идти.
#426 #516914
Оп вкатывается в тред после трехдневного отсутствия. Я тут вроде как в командировке, пекарни нет, и поэтому активно участвовать в дискуссиях не смогу еще где-то неделю. Но с шапкой разберусь, в новом треде все будет. Такие дела.
#427 #516927
>>516914
Да и о боже добавьте последнего Прату в шапку.
#428 #516971
Скажите, ананасы, насколько плохой стиль -- использовать фигурные скобки после комментария для того, чтобы удобно скрывать?

Типа, такая запись:

// Doing your mom.
{
onBoardHerAss();
}

в кьютокриэйторе скрывается в :

// Doing your mom. { ... }
#429 #516977
>>516971
http://habrahabr.ru/post/150329/
Если ты о стиле программирования, то вот.
#430 #517013
Плюсаны, а можно переместить курсор в консоли стандартными средствами iostream? Знаю, что можно использовать winapi, но как-то мне не нравится такой вариант: к примеру, на линухе же не получится использовать winapi.
#431 #517050
>>517013
Нет. Набор стандартных способов заимоействия с консолью очень ограничен, так как считается что консоль это устройство типа телетайп с очень ограниченым функционалом. Если в твоей системе в качестве консоли используется устройство с более широким функционалом - тебе нужно уже дергать драйвера этого устройства. А конкретно в операционной системе виндоуз консоль вообще гавно. Если тебе нужно переносимое решение, одним из вариантов может быть использование библиотек, например ncurses.
#432 #517061
>>517050
Спасибо, понял. То есть если писать конкретно под шиндовс, то гораздо разумнее юзать их библиотеку?
#433 #517068
>>517013
Ограниченно можно попробовать \b, но работает он не всегда.
#434 #517072
>>517068
Он не позволяет на строку вверх подняться.
#435 #517081
Двачаны, помогите нубасу. Как написать программу решающую анаграммы (например spot - stop, file - life)?
Мне пока ещё очень тяжело работать со строками на крестах, так что я не очень понимаю алгоритм. Как я думаю, сначала нужно попросить пользователя ввести слово, потом ему нужно посчитать количество букв в слове и создать многомерный массив или что-то типа того. В общем введя слово "faggot" нужно, чтобы программа перебирала словарь в поиске слов где есть одна a, одна f, две g, одна o и одна t. Как это делать - душой не ебу. Неужели нужно создать цикл под каждую букву алфавита? Дальше поиск по словарю и вывод слов совпадающих с введённым, но не являющиеся собственно введённым. То есть если в словаре есть слово stop, и пользователь введёт stop оно не выводило stop как решение анаграммы. В общем почти ничего не понимаю, подскажите. Можно ли сделать проще? А то как-то много циклов выйдет.
#436 #517083
>>517081
Каждый раз делать перебор - будет слишком большая алгоритмическая сложность. Тебе нужен индекс.
Заводишь индекс multi_map<string, string>. Далее для каждого слова в словаре английских слов:
1. Сортируешь символы по алфавиту. stop => opst. Например, конвертируешь string в vector<char> и вызываешь std::sort.
2. Запихиваешь в multi_map по ключу opst это слово.
#437 #517084
Таким образом ты получишь структуру данных {opst=>[stop, spot], efil => [file, life]}. Дальше поиск анаграмм тривиальный - сортируешь твое слово, лезешь в индекс, получаешь все анаграммы.
#438 #517093
>>517081
Тебе нужно сгенерировать все перестановки твоих букв. Проще всего рекурсивно берешь первую букву, генеришь все перестановки оставшихся букв, к этим перестановкам добавляешь взятую перую букву в начало. Потом тоже самое для второй и т.д. Слово stop просто пропускаешь, там в зависимости от алгоритма оно может напрмиер генерироватся всегда первым.
#439 #517123
>>517093
Ну так если человек введет spot, то нужно выдать stop, а stop не выдавать. Прикол не в том, чтобы stop не показывать, а в том, чтобы пользователю не предлагалось слово, которое он ввёл в качестве решения для анаграммы. Наверное просто строки strcmp'ом сравню.
>>517083
Спс. Понял что лох и многого не знаю. Буду долго писать, а вроде такая простая хрень.
#440 #517199
Почему только одна книга Страуструпа в шапке?
Для нюфань
Programming Principles and Practice Using C++ - rutracker.org
Для беглого осмотра основ
A Tour of C++ - rutracker.org
"For mastery"
The C++ Programming Language(4-е издание) - rutracker.org
#441 #517217
>>517199
Потому что субъективщина. Где например C++ за 21 день?
#442 #517218
А как сейчас фрилансерам на плюсах? Может можно чего заработать, занимаясь доковыриванием старого говна?
#443 #517243
>>517218
Если можешь в qt - то норм. Да и гейдев хоть и дохлый, но все же. А вот насчёт этого не знаю. Думаю, так на любом яп много не заработаешь.
#444 #517259
>>517217
Страуструп, так-то, уважаемый человек!
#445 #517285
Уже третий день пишу рандомный генератор пещер. Остановился на половине, заметив, что код какой-то не крестовый. То есть он работает, хоть и, пока что, хуево, но чувствую, что так писать на крестах нельзя. Так что пока не поздно, прошу помочь и указать на ошибки структуирования программы и на плохой стиль.

main.cpp
http://ideone.com/LZcHnR

Dungeon.h
http://ideone.com/jjOZLH

Dungeon.cpp
http://ideone.com/ZWVYj

Constants.h
http://ideone.com/yBoTh6
#446 #517327
6 Кб, 599x83
#447 #517355
Хотел скачать с официального сайта Qt Qtcreator. Получил пикрелейтед. Сайт вообще живой?

http://www.qt.io/download
#448 #517365
>>517355
Да, сегодня тоже зашел и такая хуйня. Подожди малёха, думаю оживет.
#449 #517387
В природе существует документация/референс к плюсовым биндингам ncurses? Не хотет курить сырцы.
#450 #517400
>>517081
Для такого рода поиска словарь делают с помощью графа.
#451 #517441
>>517259
На самом деле нет. Для новичков вообще не годится. Такое чувство, будто страус думает, что C++ все с рождения знают
#452 #517456
>>513457
А что это за IDE у тебя?
#453 #517473
>>517456
Кодблокс.
46 Кб, 504x604
#454 #517537
Анон, а подскажи какой-нибудь хороший способ разработки и тестирования ПО доступный для одиночных прогеров. И если знаешь, что можно почитать об этом на великом и могучем.
28 Кб, 1366x768
29 Кб, 1366x768
пытаюсь перевернуть строку nubas #455 #517659
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char* argv[])
{
\tchar str[80];\t
\tchar buf[80];
\tcout<<"Enter string : \n"<<endl;
\tcin.getline(str,80);
\tint i=strlen(str)-1, j=0;

\twhile (str>=0) {
\t\tbuf= str[j];
\t\ti--;
\t\tj++;}
\tcout << buf;
return 0;

-------------------------------------
переворачивается, но иногда в конце вот эта собачка, почему она там?
#456 #517661
>>517659
>>517659
поправил
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char* argv[])
{
char str[80];\t
char buf[80];
cout<<"Enter string : \n"<<endl;
cin.getline(str,80);
int i=strlen(str)-1, j=0;

while (str>=0) {
buf= str[j];
i--;
j++;}
cout << buf;
return 0;
}
#457 #517717
>>517659
Терминальный нуль забыл.
#458 #517768
>>517717
спасибоу, а я думал он сам как-то добавляется
#459 #517780
Крестоносцы, что за хрень у вас на оппике? (Долго не заходил на двач)

JIT у нас лучше, чем обычная компиляция?
Строгая типизация это что-то плохое?
C ещё не на свалке истории?

Или это типа само троллинг? Тогда где php?
#460 #517822
>>517780

>C ещё не на свалке истории?


Далеко ему еще, к сожалению.
мимосишник
#461 #517829
>>517780

>само троллинг


This. Ну и еще своеобразный топ доебов, которыми школьники с жабами и пистонами пытаются доказать, что их язык лучше.
sage #462 #517850
>>517780
Ты че, охуел? Динамическая типизация - это так здорово! Часами отлаживать код, устранять ошибки, которые могли бы быть замечены на этапе компиляции - что может быть прекраснее? Тупым крестоблядям не понять, ведь они не тратят впустую время на устранение граблей, которые им услужливо подставляет собственный язык. Да, жабаскрипт, я на тебя намекаю.
#463 #517876
поддвачнём аноны!
https://2ch.hk/pr/res/517858.html
#464 #517900
>>517822
Ну это я загнул немного. На самом деле C++ без QT довольно мало применим. А зачем нужен чистый си в наше время? Микроконтроллеры небось микроконтроллишь?
#465 #517913
>>517900

>C++ без QT довольно мало применим


Вот уж где загнул так загнул. Даже если забыть про килотонны тырпрайзного легаси времен, когда куте еще не было. И да, я не люблю QT, но таки на самом деле гораздо чаще вижу проекты без него.
sage #466 #517952
>>517876

>На самом деле C++ без QT довольно мало применим


на основании своего богатого опыта написания laba6 вещаешь?
#467 #517959
>>517900

>Микроконтроллеры небось микроконтроллишь?


Не, телефонные сети.
#468 #517962
>>517959
Это что такое? Покажи! Научи! Хотеть!
#469 #517963
>>517962
Стек протоколов SS7, некоторые из них жуткое легаси, вроде TCAP, но вот мобильные протоколы нормально так обновляются.
#470 #517967
>>517963
А я ничего не понял. Ты вообще чем занимаешься на работе?
15 Кб, 298x300
#471 #517969
Сап. Очередной студентоид просит совета.
Курсовая - система учета в аптеке. База данных, связи между объектами, окошки и прочая лабуда, ничего интересного. Нужно написать на С++. Но есть один нюанс. Универ не совсем... айтишный и запускать надо будет все это дело на университетской Visual Studio (надеюсь, старше 2013). Никаких бустов, Qt и прочего. Максимум .net.
Но есть одна проблема. Я красноглазый пердолик и вообще предпочитаю скрипты.
Есть два стула:
1) Максимально изъебнуться и любой ценой сделать кроссплатформенное приложение. Статически скомпановать его с qt, рисовать на opengl, что угодно, но заставить приложение работать в прыщах.
2) Расслабить пукан и позволить дотнету войти в меня. Написать непортируемое приложение конкретно под Windows, максимально задействовать виндовые компоненты и библиотеки. И попытаться запустить на Mono, конечно.

Наверное оба варианта для меня одинаково интересны. Что посоветуете?
Не буду письку сосать
#472 #517970
>>517967
Код пишу.
#473 #517971
>>517969
Пиши на C#, скажешь что это новый C++.
#474 #517974
>>517970
А кода он потом деётся?
#475 #517976
>>517969
Учитывая, что системы учета в аптеке на С++ никто в здравом уме не пишет (красноглазые пользуют Java), то пиши на дуднете - отличий с C# будет минимум, а так ты хоть будешь знать, как это делается.
#476 #517979
>>517971
Содомит!

>Универ не совсем... айтишный


Может сработать, базарю.
#477 #517982
Реквестирую сайт в интернете где есть задачи разных уровней сложности. Можно решив задачу отправить её туда чтобы он прогнал по тестам. И чтобы были авторские решение с описание алгоритма решения и обязательно описанием кода.
#478 #517984
>>517974
На кластеры под линухом/виндой/солярой
#479 #517985
>>517984
И что он делает? И что делают те кластеры? Простым языком.
#480 #517987
>>517985
Антош, не приставай к взрослым.
#481 #517996
>>517985
Да много что он делает.
Менеджмент линий, абонентов, геолокации, всякие сервисы типа запроса баланса (точнее он предоставляет интерфейс для реализации подобных сервисов), доставка смс, пакетных данных и прочие радости твоей жизни.
#482 #517997
>>517996
Это нельзя сделать на высоком языке из-за производительности, или чтобы не рефакторить?
#483 #517999
>>511121
Слушай, как в юзерскрипте отключить показ кода с pastebin и ideone?
#484 #518000
>>517997
Основа была запилена в далеком 1980 году, с тех пор никому не хотелось переделывать огромные портянки кода. Производительность там тоже в приоритете, каждый % деградации сопровождается сильным недовольством заказчика.
#485 #518009
НОВЫЙ ТРЕД
Поспешил - людей насмешил.
https://2ch.hk/pr/res/518004.html
https://2ch.hk/pr/res/518004.html
https://2ch.hk/pr/res/518004.html
#486 #518010
>>518000
Наврал наверное про 1980. Сейчас вот нашел только код датированный 1993 г., но сути это сильно не меняет, легаси оно и есть легаси.
#487 #518013
Открыть кингстоны!
#488 #518036
>>517537
tdd + catch
#489 #519059
>>515040
скажи, на основе чего ты это писал? http-сервер сам писал или что-то готовое? какие либы или фреймворки юзал?
#490 #519248
>>519059
Найди его пост на хабре
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 22 августа 2015 года.

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

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