Это копия, сохраненная 17 июля 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Предыдущий: >>478556
Как он прочитает, ему небритая мошонка обзор загораживает.
Выводы у тебя правильные, а вот исходные данные - нет.
Сферический программист в вакууме может сидеть под ДОС и писать программы на прологе.
пролог — это абсолютный сферический кавай в вакууме
template <class T>
T sum(T a,T b);
я хочу, чтобы она была перегружена только для стандартных типов (int, float,...), а для классов определенных пользователем требовалась принудительная типизация?
Ставить по дефолту какой-нибудь static_assert. А всё остальное определить частичной специализацией.
Попробуй глянуть Александруску, наверняка найдёшь нужную инфу.
Это не то, тут шаблон распространяется на все классы. Я хочу, чтоб работало:
int a,b;
sum(a,b);
а в этом случае компилятор выдавал ошибку:
myclass c,d;
sum(c,d);
Александреску (румын)
Вот эта книжка:
http://www.ozon.ru/context/detail/id/3829080/
>>489941
Первое, что приходит на ум, простыня следующих конструкций:
static_assert(std::is_same<T, int>::value)
static_assert(std::is_same<T, float>::value)
... etc
http://ideone.com/9JG8Pi
Теперь вот тоже интересно, можно ли эту простыню реализовать более элегантно.
Да, еще надо делать std::remove_reference
Код предельно прост.
[code lang="cpp"]
MainWindow::MainWindow(QApplication app) : QMainWindow(), mApplication(app)
{
systemTrayMenu = new QMenu();
QAction quitAction = systemTrayMenu->addAction(tr("Quit"));
connect(quitAction, SIGNAL(triggered(bool)), this, SLOT(onQuit(bool)));
sysTrayIcon = new QSystemTrayIcon(QIcon(":icons/icon.png"));
sysTrayIcon->setContextMenu(systemTrayMenu);
sysTrayIcon->show();
connect(sysTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSysTrayActivation(QSystemTrayIcon::ActivationReason)));
}
void MainWindow::onSysTrayActivation(QSystemTrayIcon::ActivationReason reason)
{
std::cout << reason << "\n";
}
void MainWindow::onQuit(bool)
{
mApplication->exit(0);
}
[/code]
И даже еще тривиальнее
[code lang="cpp"]
MainWindow::MainWindow(QWidget parent) : QMainWindow(parent)
{
systemTrayMenu = new QMenu();
QAction quitAction = systemTrayMenu->addAction(tr("Quit"));
connect(quitAction, SIGNAL(triggered(bool)), this, SLOT(close()));
sysTrayIcon = new QSystemTrayIcon(QIcon(":icons/icon.png"));
sysTrayIcon->setContextMenu(systemTrayMenu);
sysTrayIcon->show();
connect(sysTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSysTrayActivation(QSystemTrayIcon::ActivationReason)));
}
void MainWindow::onSysTrayActivation(QSystemTrayIcon::ActivationReason reason)
{
std::cout << reason << "\n";
}
[/code] Все равно вывод в консоль ВСЕХ произошедших эвентов activated происходит ПОСЛЕ закрытия окна.
[code lang="cpp"]
class FirstClass
{
public:
\tFirstClass (SomeClass & a, AnotherClass & b);
};
class SecondClass
{
public:
\tSecondClass (SomeClass & a, AnotherClass & b, YobaClass & c);
};
class FirstPool
{
\tstd::list <FirstClass > Objects;
\tSomeClass aa;
\tAnotherClass bb;
\t
public:
\tFirstPool (SomeClass & a, AnotherClass & b) :
\t\taa (a), bb (b)
\t{}
};
class SecondPool
{
\tstd::list <SecondClass > Objects;
\tSomeClass aa;
\tAnotherClass bb;
\tYobaClass cc;
\t
public:
\tSecondPool (SomeClass & a, AnotherClass & b, YobaClass & c) :
\t\taa (a), bb (b), cc (c)
\t{}
};
[/code]
Я хочу сделать красиво, шоб DRY соблюдалось, и сделать для них общий шаблон. Но тут возникают проблемы:
1. Хранить cc в инстанцированном шаблоне-аналоге FirstPool это дикость, ибо жертвуется производительность в рантайме в угоду удобству компиляции. Как сделать, чтобы член cc инстанцировался только вручную для одного из параметров шаблона? И можно ли это вообще сделать? Пробовал писать что-то в духе YobaClass TemplatePool <SecondClass>::cc при объявлении члена, тогда конструктор считает YobaClass TemplatePool <SecondClass>:: именем класса и не хочет их присваивать.
2. На самом деле, помимо параметра шаблона, который определяет, будет внутри FirstClass или SecondClass, есть еще параметр, совпадающий с AnotherClass, он просто передается во все конструкторы. Если я вручную инстанцирую конструктор шаблона по обоим параметрам, то все заебись. Но мне-то нужно указать различные реализации только для первого параметра, а AnotherClass трогать не нужно, он может быть каким угодно. А когда я пытаюсь инстанцировать конструктор новым шаблоном уже с одним параметром, при сборке пишет, что шаблон конструктора уже определен. Как совладать с этим дерьмом, анон?
[code lang="cpp"]
class FirstClass
{
public:
\tFirstClass (SomeClass & a, AnotherClass & b);
};
class SecondClass
{
public:
\tSecondClass (SomeClass & a, AnotherClass & b, YobaClass & c);
};
class FirstPool
{
\tstd::list <FirstClass > Objects;
\tSomeClass aa;
\tAnotherClass bb;
\t
public:
\tFirstPool (SomeClass & a, AnotherClass & b) :
\t\taa (a), bb (b)
\t{}
};
class SecondPool
{
\tstd::list <SecondClass > Objects;
\tSomeClass aa;
\tAnotherClass bb;
\tYobaClass cc;
\t
public:
\tSecondPool (SomeClass & a, AnotherClass & b, YobaClass & c) :
\t\taa (a), bb (b), cc (c)
\t{}
};
[/code]
Я хочу сделать красиво, шоб DRY соблюдалось, и сделать для них общий шаблон. Но тут возникают проблемы:
1. Хранить cc в инстанцированном шаблоне-аналоге FirstPool это дикость, ибо жертвуется производительность в рантайме в угоду удобству компиляции. Как сделать, чтобы член cc инстанцировался только вручную для одного из параметров шаблона? И можно ли это вообще сделать? Пробовал писать что-то в духе YobaClass TemplatePool <SecondClass>::cc при объявлении члена, тогда конструктор считает YobaClass TemplatePool <SecondClass>:: именем класса и не хочет их присваивать.
2. На самом деле, помимо параметра шаблона, который определяет, будет внутри FirstClass или SecondClass, есть еще параметр, совпадающий с AnotherClass, он просто передается во все конструкторы. Если я вручную инстанцирую конструктор шаблона по обоим параметрам, то все заебись. Но мне-то нужно указать различные реализации только для первого параметра, а AnotherClass трогать не нужно, он может быть каким угодно. А когда я пытаюсь инстанцировать конструктор новым шаблоном уже с одним параметром, при сборке пишет, что шаблон конструктора уже определен. Как совладать с этим дерьмом, анон?
Вот тут полный код. На шинде он не выводит ничего до тех пор, пока не нажмешь Quit в меню tray.
http://rghost.ru/6QpfgSsY2
Просто ты дауненок. Замени std::cout на qDebug() и поймешь, что это отсос стандартной библиотеки, а не Qt.
Не, так не получится, у них же разные структуры данных внутри списки из объектов разных классов. Если я наследую второй от первого, то во втором будет лишний список, жраться дохуя будет. А если я, например, наследую оба от абстрактного класса, то реализации методов все равно в каждом будут разные, и никакого выигрыша в сокращении кода не будет.
Что-то страшное ты написал. Я не понял. Почему бы не написать самый общий пул объектов с variadic template и потом трахаться с его частичной специализацией?
this
>>490067
норкоман, ты зачем '\n' хуячишь?
http://en.cppreference.com/w/cpp/io/manip/endl
>Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('\n')) followed by os.flush().
и как тебе уже сказали, юзай qDebug(), он автоматом перевод строки хуячит в конец
Так ведь мне тут не надо переменное количество параметров шаблона. Переменное количество только параметров у конструктора должно быть, причем, сколько их два или три - просто зависит от одного из параметров шаблона, а не от их количества. Или я не понял тебя просто. Что ты предлагаешь совать в список типов для variadic template?
Предагаю в список аргументов к шаблону пихать тип пуляемого объекта и типы параметров, которые уйдут конструктору при создании объектов.
Набросал на коленке примерную реализацию:
http://pastebin.com/aZUsynrQ
Ох лол, это 10 из 10 просто. Грязный хак с точки зрения логического разбиения, но как изящно-то, блядь!
>CtorArgs... args
Лол, я чота не встречал такого. Это 11 стандарт или 14? Тащемта, выглядит охуенно, но я не уверен, что VC++ это переварит, даже последняя.
Ну тогда добра тебе, няша, сейчас попробую. Предыдущему куну с наследуемыми шаблонами тоже добра, я бы, наверное, в итоге что-то типа такого стал делать, но модно-молодежно с функторами и вариадиками выглядит интереснее, лол.
Сперма проглотила, ideone тоже:
http://ideone.com/TC7GJt
Дело за малым: сделать синглтоном и потокобезопасным.
А куда деваться? Приходится курить инфу на ангельском, иначе ничего не узнать. Статьи на хабрах по C++11 неплохо так описывают новый стандарт. Ещё стоит выкурить книжку Майерса:
http://shop.oreilly.com/product/0636920033707.do
Статьи по фотонике – вот это самый страшный пиздец, после этого говна бояться нечего.
>где вы берете инфу по новым стандартам, ее ж нихуя в учебниках нет?
В вики статью прочитай, там все нововведения перечислены же. Потом уже предметно по каждому пункту разбирайся. Олсо, перед выходом стандарта и сразу после каждый день какой-нибудь хуй в своем бложике расписывал за лямбды и rvalue references. Ты реддиты читаешь, хэкир ньюс?
Ну я уже разобрался и реализовал, да. Потокобезопасность у меня сразу была прикручена, а синглтон не вписывается в концепцию, масштабируемость и все дела, типа может быть несколько однотипных инстансов пула, в которых объекты отличаются только по служебным данным. Но это детали уже, а тебе спасибо еще раз.
Алсо, мне кажется, добавлять новые объекты с фронта таки хуже, ибо в некоторых случаях, если работать будут только несколько задних объектов в списке, скорость может улучшиться за счет кэширования. Но зато так получается по-коммунистически, работают все, лол.
>В вики статью прочитай, там все нововведения перечислены же.
this
>какой-нибудь хуй в своем бложике расписывал
this
Ноуп.
Тут порой так скучно, что я готов тебя выслушать.
Космоса не существует, его выдумали жиды чтобы сбивать людей с пути истинного. Земля плоская, а звезды, луна и солнце закреплены на небе, которое суть есть хрустальная полусфера.
alt+enter
{
delete Matrix[];
}
delete Matrix[];
верно ли очищаю 2мерный массив?
есть ли сахар, позволяющий генерировать и удалять такие массивы без нагромождения циклов (без библиотеки, мне надо именно так).
Result=T();
для придания Result нулевого значения переменной.
Есть ли в общем случае требование, что безаргументный конструктор должен возвращать ноль для исчислимых классов (числа, векторы, и т д)?
>C++
>безаргументный конструктор должен возвращать ноль
Конечно есть, но тогда конструктор не должен использоваться в качестве делителя.
std::vector / std::array — это уже тут платина нахуй
>>490766
http://stackoverflow.com/questions/2417065/does-the-default-constructor-initialize-built-in-types
>верно ли очищаю 2мерный массив?
У тебя не двумерный массив, а массив массивов. Не проще ли выделять память N x M и переопределить оператор индексации, чем для каждой строки выделять память?
Чеблять? Таблетки прими.
Массив массивов расходует память на хранение ненужных указателей. Двумерный массив M x N элементов размером S занимает ровно M x N x S памяти, и не байтом больше.
Спасибо, я совсем не сишник. ПРосто увидел в треде твой ответ
Или может есть другая возможность создать массив строк без string?
Нету. Лучше Python и R
Можно, но зачем микроскопом гвозди забивать?
Чому рейкастер вольфенштейна красненький? Я его в 14 лет написал на паскале за три дня. Это не 87, где надо вилкой говно ковырять.
Не ебу, пик не мой, я его даже не читал.
Если до этого никогда не программировал, то решай простые алгоритмические задачи. Диаграмму Вороного для быстрого поиска ближайшего соседа построй, например.
а какая структура бд у борды? сообщения, как я понимаю, - это одна большая куча, а треды? как связывать треды с сообщениями?
>это красный уровень, чо
В 14 лет без интернета - красный. Сейчас я его не напрягаясь за вечер напишу.
Такое чувство, будто меня сейчас обоссут и выебут, но что такое "кресты"? Я полный нуфак.
в том числе и потому, что ты его уже писал:)
Верхний правый угол. Надпись маленьким шрифтом.
Эээ... тоо есть это разработка чего-то на одной системе для другой, да?
Не знаю, как во всяких классических движках типа вакабы сделано, а у меня пост ссылается на тред. Ну типа class Thread { int id; }; class Post { int id; int threadId; }; Естественно, через foreign key.
Не слушай этих петросянов. Кресты - жаргонное название C++ (потому что на конце два креста). Иногда еще говорят "плюсы".
задача на полный перебор
>но вот если это число нефиксированно...
что значит "нефиксированно"? у тебя вводится граф, у него определенное число вершин
Третью до конца сфоткай, похоже на венгерский, самая веселая будет никто в интернетах не умеет верно реализовывать венгерский
Сделай трейт шаблонный, и определи его для стандартных типов. Используй его вместе с enable_if
А чем вы там конкретно занимаетесь? Так, может быть, смогу чего-нибудь реальное подсказать.
Про паттерны у банды четырёх читай. Про всякие идиомы можешь почитать у Александреску хотя хз, как его штуки в энтерпрайзе живут. Покури буст с сырцами.
что-то типа высокоуровневого эмбеддеда(на плюсах, лул), походу немного qt и системной хуйни(драйвера малофья)
Блджад, ещё и в дс2, походу.
Надо бы тред qt-куна призвать да спросить, как в эти qt вкатываться и чего читать.
не, это не в рашке, месяц у меня есть из-за получения визы как раз
да ладно, уж кт я и сам как-нибудь подберу
>как в эти qt вкатываться и чего читать.
я читал официальные доки, серьезно. там всё очень просто и понятно
оттарабанил-2года-на-qt-symbian-кун
Нет, маня, так получаются те, кто пишет программы. Из кукаретиков же получаются аналоги средневековых "вечных студентов". Первые в итоге набивают шишек и начинают писать хороший код, а вторые так и остаются на всю жизнь писателями факториалов и мамкиными тралами с охуенными амбициями и самомнением, но абсолютно непригодными для написания программ.
Не работал. Прочитал сейчас по диагонали. Не понял, в чем твой вопрос.
Зацените вот
template <class T> class Singleton
{
protected:
void Ctor();
};
template <class T>
void Singleton<T>::Ctor()
{
\t//default constuctor is nice in its emptiness
}
class Kek : public Singleton<Kek>
{
protected:
void Ctor() override; //КО-КО-КО ЭТА ФУНКЦИЯ НИЧЕГО НЕ ОВЕРРАЙДИРУЕТ
}
Но на самом деле оверрайдит, только на кейворд ругается. Эх блядь пичаль.
>через жопу
>MSVS
Кто бы сомневался.
Алсо, ты долбоебушка, это тебе не жаба, тут надо, чтоб функция была объявлена как virtual в базовом классе.
http://en.cppreference.com/w/cpp/language/override
>Specifies that a virtual function overrides another virtual function.
А вот за это спасибо, я видать скоро отстрелю себе всю ногу по самые яйца.
Каким образом у тебя там Singleton<Kek> вообще инстанцируется, если Kek еще не объявлен, а единственное его объявление вот только что началось?
> синглтон
Дважды подумай, прежде чем этот антипаттерн использовать.
http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons
если у тебя физически только один ресурс то никак тебе этих проблем не избежать
Поэтому я и говорю "подумай дважды", а не "выкини его нахуй"
чёт я не вижу чтобы у него там что-то инстанцировалось
https://thepiratebay.am/torrent/7139984/C___Concurrency_in_Action__Practical_Multithreading вот такую нашел, что скажете?
C++11, сойдёт вполне.
>Я еще интересуюсь робототехникой, но там на с++ разве что уже на большие системы писать можно, на мелкие только с
в современном "эмбеддеде" мегагерц и килобайт больше, чем в моем первом компе
Утраиваю кореша, нужен кореш, прямо щяс.
Возможно, все что я читал обычно делалось на сишке, но может ты и прав, что можно будет ставить малинку и не парить мозг.
Мамку твою ебу.
Спс.
Qt
NMAKE:-1: error: U1077: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.exe" :
Напомните как пофиксить.
Есть снимок со спутника landsat 8, у этого снимка 9 спектральных каналов. До этого я открывал эти снимки в программе Envi. Теперь же стоит задача как то обрабатывать эти снимки самому, то есть выделять каналы, уменьшать или увеличивать коэффициент того или иного канала. Пока хотя бы хочется открыть это снимок (вообще их там много, но с помощью Envi я их обьединил в один) и он в формате tif. Препод сказал погуглить опен сурсные программы, ничего толкового найти не могу. Вот как то так. Вот тут в конце, примеры снимков с разными каналами http://www.geol.vsu.ru/ecology/ForStudents/3Graduate/RemoteSensing/Lection04.pdf
OpenCV, вроде бы, может в tiff. Глянуть бы на саму тиффку ещё.
Если OpenCV Не хочется, то вот ещё:
http://trac.osgeo.org/geotiff/
http://www.remotesensing.org/libtiff/
Может, кто-то пытался пойти туда, и может поделиться кулстори?
> какие шансы туда попасть?
Очень сильно зависит от твоего уровня.
> К чему готовиться?
Они очень любят математику и всякие логические нетривиальные задачи. Хз, попробуй глянуть задачки при поступлении в ШАД.
>>494184
http://www.mingw.org/
задачки при поступлении...
А не знаешь, насколько им важно наличие высшего образования? Я не закончил свою шарагу, даже неоконченного высшего нету. Стоит пробоваться или это дохлый номер?
Хмм, спасибо! Похоже, им это не очень важно по базе, но, подозреваю, отсутствие ВО будет минусом.
А в чём можно запустить?
Дев с++ похоже первой библиотеки не знает, а я только в нём работал немного. Я не программист нихуя, но мне очень нужно запустить эту программу, заранее благодарю за помощь.
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include "math.h"
const float h = 0.05;
const int N = 21;
int _tmain(int argc, _TCHAR argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
float x[N], m[N], k[N], f[N], c[N], d[N], y[N];
float A = 0, B = 3.718;
float alpha1 = -1, alpha0 = 1, betta0 = 1, betta1 = 0;
for (int i = 0; i < N; ++i)
{
x = h i;
m = -2 + h (-2 x);
k = 1 - h (-2 x) + h h (-2);
f = 4 x;
}
c[0] = (alpha1 - alpha0 h) / (m[0] (alpha1 - alpha0 h) + k[0]
alpha1);
d[0] = (k[0] A h) / (alpha1 - alpha0 h) + f[0] h h;
for (int i = 1; i < N - 2; ++i)
{
c = 1 / (m - k c[i - 1]);
d = f h h - k c[i - 1] d[i - 1];
}
y[N - 1] = (betta1 c[N - 3] d[N - 3] + B h) / (betta1 (1 + c[N -
3]) + betta0 h);
for (int i = N - 3; i >= 0; --i)
{
y[i + 1] = c (d - y[i + 2]);
}
y[0] = (alpha1 y[1] - A h) / (alpha1 - alpha0 h);
for(int i = 0; i < N; i++)
{
printf("y[%d] = %.4f \n", i, y);
}
system("pause");
return 0;
}
А в чём можно запустить?
Дев с++ похоже первой библиотеки не знает, а я только в нём работал немного. Я не программист нихуя, но мне очень нужно запустить эту программу, заранее благодарю за помощь.
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include "math.h"
const float h = 0.05;
const int N = 21;
int _tmain(int argc, _TCHAR argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
float x[N], m[N], k[N], f[N], c[N], d[N], y[N];
float A = 0, B = 3.718;
float alpha1 = -1, alpha0 = 1, betta0 = 1, betta1 = 0;
for (int i = 0; i < N; ++i)
{
x = h i;
m = -2 + h (-2 x);
k = 1 - h (-2 x) + h h (-2);
f = 4 x;
}
c[0] = (alpha1 - alpha0 h) / (m[0] (alpha1 - alpha0 h) + k[0]
alpha1);
d[0] = (k[0] A h) / (alpha1 - alpha0 h) + f[0] h h;
for (int i = 1; i < N - 2; ++i)
{
c = 1 / (m - k c[i - 1]);
d = f h h - k c[i - 1] d[i - 1];
}
y[N - 1] = (betta1 c[N - 3] d[N - 3] + B h) / (betta1 (1 + c[N -
3]) + betta0 h);
for (int i = N - 3; i >= 0; --i)
{
y[i + 1] = c (d - y[i + 2]);
}
y[0] = (alpha1 y[1] - A h) / (alpha1 - alpha0 h);
for(int i = 0; i < N; i++)
{
printf("y[%d] = %.4f \n", i, y);
}
system("pause");
return 0;
}
в армовых атмелах и stm32 есть до 512кб флеша(!!!) + 64кб рамы. туда уже блядь не просто плюсы суют, туда уже блядь луа с жабоскриптом хуячат
эмбеддед нахуй бля!
stdafx.h: No such file or directory.
Где можно прочитать про дискретизацию и квантование изображений в Qt? (В Шлее не нашёл нихуя, гугл молчит).
Что ты подразумеваешь под дискретизацией в Qt? Как непрерывные сигналы собираешься в комплюхтер загружать?
Какое квантование тебе нужно?
На сколько я знаю, Qt – не либа для обработки изображений.
Тривиальное квантование описывается одной формулой.
Для квантования цветных картинок можно решать задачу кластеризации.
Задание моё звучит так:
"Дискретизация кадра, хранящегося в объекте QImage библиотеки Qt, полученного с устройства видеозахвата библиотеки компьютерного зрения openCV."
И то же самое с квантованием.
Qt тут не причем, же. Выгружаешь из QImage пиксели в массив, ну или три (четыре) дискретизируют наверное каждый цвет отдельно, пердолишся с байтами, может библиотека какая есть. Полученое снова заливаешь в QImage.
Ты понимаешь, что такое дискретизация? Может быть, тебе какой-нибудь ресемплинг нужен?
я изложил как есть. если б я хоть каплю понимал в чем дело, то не стал бы тут о помощи молить.
Кек. Открываем справку по QWidget. Читаем:
Custom Widgets and Painting
Since QWidget is a subclass of QPaintDevice, subclasses can be used to display custom content that is composed using a series of painting operations with an instance of the QPainter class. This approach contrasts with the canvas-style approach used by the Graphics View Framework where items are added to a scene by the application and are rendered by the framework itself.
Each widget performs all painting operations from within its paintEvent() function. This is called whenever the widget needs to be redrawn, either as a result of some external change or when requested by the application.
The Analog Clock example shows how a simple widget can handle paint events.
Особое внимание на последний абзац.
>Его нужно перерисовывать после выполнения eventPainting?
в обработчике события paintEvent
>Как?
открой блядь доку
в обработчике создаешь QPainter painter(this); и рисуешь
это всё относиться к qt 4.x, для qt 5.x ОТКРОЙ БЛЯДЬ ДОКУ
У меня есть класс окна Batya, в нем виджет Syna. Вот чтобы отрисовать на сыне из бати вызвается этот метод отрисовки и ему передается указатель на сыну и нихуя.
>виджет Syna
для виджета Syna определяешь функцию paintEvent (у тебя же Syna — это класс, а не инстанс, я надеюсь?)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3851.pdf
Я короч сделал, отрисовывает. Но вот теперь хочу заставить квадрат двигаться
уже учу блжад
Qt. Загрузил картинку в виджет (QPixmap), порисовал в виджете pen'ом как теперь все это сохранить правильно (картинку с нарисованым)?
Решил сделать шаблонную типизацию, чтобы элементом матрицы, могла быть тоже матрица. В итоге пикрилейтед.
Что ему не нравится? Как вообще нужно переопределять операторы в шаблонных классах?
>Решил сделать шаблонную типизацию, чтобы элементом матрицы, могла быть тоже матрица.
Задротов полон тред. Когда встретится тебе эта задача, тогда её и напишешь.
Сейчас её решение стоит 52500 на руки в ДС1, при средней 77500 для программистов.
С чем нас всех и поздравляю. Вечная нам память.
>Когда встретится тебе эта задача
Так она уже встретилась. Нужно реализовать метод конечных элементов. Задание пикрилейтед.
В этом методе практически все расчеты основаны на матрицах, причем встречаются и матрицы матриц.
Весь текст варнинга на пике
>Тензоры ты имел в виду?
Не знаю, мне только алгоритм объяснили. Даны точки ABCD, из них составляется фигура, например трапеция, как на пике. Затем эта фигура разбивается на какое-либо количество элементов-треугольников. Ну а дальше начинается вакханалия с матрицами.
В глаза ебусь, ну и хуй с ним:
http://stackoverflow.com/questions/4039817/friend-declaration-declares-a-non-template-function
Как отрисовывать картинку QPixmap в виджете, чтобы она не замощалася (как методом brush)
Вчера общался с человеком(хикка, и с людьми общаюсь редко, особенно на тему программирования) и понял, что я неправильно произношу очень многие вещи.
Например cin и cout я всегда произносил как "кин" и "каут" вместь "си-ин" и "си-аут", а char как "чар", вместо "кар". В общем нужен гайд о том, как правильно произносить название команд, функций, и тд.
В /fl/ есть где-то тред, который тебе поможет
Учи английский, смотри видео лекции и конференции.
Тут между Явой и Джавой определиться не могут, а ты хочешь, чтобы тебе произошение каждого оператора написали. Нету в английском языке правил произношения, забей на это.
Дан массив вещественных чисел , состоящий из n элементов(N=20)найти в какой половине находится минимальный и максимальный элемент!
Будьте же людьми, завтра зачет
Поставил себе VisualStudio 2012. Посоветуйте линки, где можно ознакомиться с формами и средой разработки в целом(но важнее именно формы, т.к. в сибилдере формы более-менее освоил, но тут они отличаются).
И какую графическую библиотеку лучше использовать- OpenGL/SFML?
Cпасибо.
Builder не нужен, MFC тоже. Единственный нормальный GUI фреймворк на C++ - это Qt. Ставь QT Creator, документация с примерами идет вместе с ним.
> И какую графическую библиотеку лучше использовать- OpenGL/SFML?
Не работал с SFML. Я использовал SDL + OpenGL, но это просто Си (без плюсов). Если будешь писать только под винду, можно использовать DirectX (для графики - Direct3D). А вообще лучше взять какой-нибудь готовый движок.
Если ты действительно хочешь знать что такое С++(зарабатывать деньги) начинать нужно в пердольке, компилирую ручками. Потом сиди в каком хочешь GUI, но без знание пердольки будешь говном-специалистом.
Если тебе для игорь и в 2d - то советую sfml. Она охуенно проста, любой разберется, и все, что нужно, в ней есть.
Sfml.
Во у людей проблемы-то! На самом деле, абсолютно посрать, как ты говоришь, если тебя понимают. Но лучше действительно стараться говорить как все.
Я ни разу не слышал, чтобы "чар" называли "каром". Ты же говоришь "двач", а не "двак". "Си-ин" и "си-аут" -- потому, что напрашивается расшифровка этого как C-input и C-output, где C -- название языка.
Вообще, понапиши, что ли, как ты другие штуки произносишь, прям даже интересно стало.
где template<typename Type> ????
а еще матрицы по ссылке передавать наверно надо (и я сомневаюсь что ты запили CoW)
> Builder не нужен, MFC тоже. Единственный нормальный GUI фреймворк на C++ - это Qt.
НАЧА-А-А-А-А-А-АЛЬНИК
>Я ни разу не слышал, чтобы "чар" называли "каром". Ты же говоришь "двач", а не "двак". "Си-ин" и "си-аут" -- потому, что напрашивается расшифровка этого как C-input и C-output, где C -- название языка.
Ловите поехавшего!
Кар по тому, что Char это сокращение от Character(Карактер). Ты школа(School) как говорить будешь? Счул?
А в C-input и C-output C это не название языка, а Console
>Кар по тому, что Char это сокращение от Character(Карактер).
тогда уж кер, он же керэктэр.
Но все говорят чар, так или иначе
ебать ты аутист, нахуя ты вообще на погруниста пошел?
int index_min = 0;
int index_max = 0;
for(int i = 0; i < N; ++i){
if(massive > massive[index_max]) index_max = i;
if(massive < massive[index_min]) index_min = i;
}
Надеюсь как определить половину массива сам догадаешься...
SFML, считай, почти прослойка для опенгла на уровне рисования треугольничков в 2д.
>>496265
Не важно, откуда это сокращение. Чаще всего в английском "ch" на начале слова читается как "ч". Кстати, ролевики персонажа обычно тоже называют "чаром", а это сокращение ровно того же слова.
Насчет же си-ин, си-аут и т.д. я говорю о том, что напрашивается, а не о том, как на самом деле. Впрочем, они могут идти и не в консоль, зависит от.
ну и похуй в таком случае
в общем:
Собираюсь уволиться с работы , чтобы наконец нормально вкатиться в pr.
Говорю сразу - не дуб, многие вещи понимаю, знаю или слышал.
Просто у меня с постановкой задач для самого себя возникают проблемы , и с практикой
Почитаю книги, напишу пару прог, а дальше что-то делать мотивации не хватает - от неуверенности в том, что делаю дело, а не хуйню.
В общем, ищу Ментора наставника на пару летних месяцев - нужен вектор и небольшая помощь советами в плане : на что обратить внимание, а на что нет.
Как то так.
спасибо)
P.S ^ C++ - язык
А по-другому никак, скорее всего, ёбли будет много. Придётся натрахаться с тульпами туплями и кучей шаблонного говна.
http://stackoverflow.com/questions/26902633/how-to-iterate-over-a-tuple-in-c-11
Охуительно, я вот три года назад не придумал искать себе гида в pr на сосаке.
Я пораскинул мозгами сейчас и понял, что можно сделать что-то в духе list <bool> results { (args1 == args2) ... }, чтобы не юзать кортежи со всяким говном. Но тут таки остается маленькая проблема - канонично было бы сделать, как в нормальном условном выражении, чтобы если первая пара не совпала, то сразу бы возвращалось false, и дальше ничего не считалось. А так получается хранение результатов всех попарных сравнений, вплоть до конца списка. Может, можно в список инициализации воткнуть какую-нибудь лямбду, или что-то подобное сделать?
Бррр... сейчас попробую накидать это говно.
Шилдт, Майерс, Гамма, Макконнелл, Саттер, Джоссатис, Александреску [, Страуструп]. Именно в таком порядке.
почему нельзя взять
make_tuple(a...) == make_tuple(b...)
?
тульпы сравниваются поэлементно же
Хуясе, а я как обычно начал хуярить костыль.
Дык можно, никто не спорит. Но смари, в инстанцированном методе будут создаваться эти тульпы на основе параметров, и это отожрет производительность. Для того, чтобы получить ответ, ничего, кроме параметров по факту не нужно, а мы будем хуярить лишние структуры данных и копировать их.
Чому так много? А можно сразу со Страуструпа? Что скажешь насчёт Прата, Дейтелов?
Что будет в результате сгенерировано? Что-то вот такое:
[code lang = "cpp"]
bool unique_f (int a1, char a2, YOBA a3, int b1, char b2, YOBA b3)
{
\treturn (make_tuple (a1, a2, a3) == make_tuple (b1, b2, b3));
}
[/code]
То есть, у нас во время работы есть два набора параметров, две их копии в тульпах, да еще и проблема из >>497133 остается.
Поебись с perfect forwarding. Скинь решение потом.
Я бы даже сказал, что скорее всего не справится. Если параметры передаются по ссылке, то юзать move semantics будет запрещено, чтобы не попортить. В качестве типов в тульпах может быть любой пользовательский класс, шаблон же. А в этом пользовательском классе может быть нестандартно реализовано копирование, причем компилятор это не увидит, тому що реализация вообще может быть в другом модуле. Он зассыт неявно поднасрать тебе, вдруг ты специально добавил преферанс и блудниц в конструктор копирования, и не ждешь, что они тут вылезут.
[code lang="cpp"]
template <typename ... Args>
bool f (Args ... args1, Args ... args2)
{
\ttry
\t{
\t\tbool results []
\t\t{
\t\t\t([&args1, &args2] ()
\t\t\t{
\t\t\t\tif (args1 != args2)
\t\t\t\t\tthrow (1);
\t\t\t\treturn false;
\t\t\t} ()) ...
\t\t};
\t}
\tcatch (...) { return false; }
\treturn true;
}
[/code]
std::tie. В релизе превращается в чистое сравнение по элементам со всеми оптимизациями.
1. Потому что с уровня "не писал на плюсах, могу хелловорлд на чистом си" до уровня нормального разработчика, умеющего в реальные задачи. Знаешь кресты поверхностно? Шилдта можно по диагонали. Вообще не кодил? Добавь перед Шилдтом Кернигана-Ричи про чистый си и Таненбаума про архитектуру пекарен. Короче, точки входа меняются, но последовательность всегда одна.
2. Не рикамендую. Он и так факультативно и в конце. Хардкорнее только читать сам стандарт. Много букв, написано довольно сухо, может отбить желание.
3. Не читал. Вполне возможно, что годнота, но в категории must read для крестопидоров их нет.
действительно Страуструпа нельзя с нуля. Скажи одну единственную книгу перед Страуструпом если ни разу не прикасался к прогерству. нужно сразу изучать времени нет на хождения вокруг да около. Таненбаум нинужен, т.к. читал Скотта Мюллера.
мимодругойанон
>>496937
>>497140
>>496937
>>497140
>>497140
ладно, допустим.
А что делать между книгами?
С чтением проблем особых нет, но когда закончится вторая книга книга первую начинаешь немного забывать, и не сказать, что толку совсем ноль, но без Практик реального pr почти так и есть.
хотя я и понимаю, что на совсем пустую голову так нельзя
>когда закончится вторая книга книга первую начинаешь немного забывать, и не сказать, что толку совсем ноль, но без Практик реального pr почти так и есть.
Еще один все понял. Просто пиши код. Книги читают с определенной целью, а не просто так. Например, чтобы улучшить свой код. Если ты не пишешь код, а только читаешь книги, то ты все делаешь неправильно.
>Если ты не пишешь код, а только читаешь книги, то ты все делаешь неправильно
cпасибо кэп, я это итак понял.
Я не хочу писать велосипеды, хотя это и полезно - не спорю.
Устраивайся на работу тогда. Хотя и там ты тоже будешь писать велосипеды.
не цепляйся к словам.
дык, я же уже и расписал зачем мне ментор :
чтобы помог вкатиться в коммерческое программирование - человек, который уже относительно давно пишет и знает, грубо говоря, на что нужно обратить внимание а на что можно немного положить
Надо уметь разбираться в чужом коде, уметь пользоваться системами контроля версий (какими именно - зависит от конкретной компании), уметь ясно излагать мысли и слушать других, владеть английским, чтобы не писать int KOLODA; (тру стори, перпод так писал), ну и, разумеется, знать предметную область (тут уже никаких конкретных рекомендаций никто дать не сможет, все зависит от того, что ты сам выберешь). Зубрить STL и виды контейнеров нет никакого смысла, но минимальный их набор знать нужно: список, словарь, стек, вектор, ну и чем они отличаются. Еще неплохо знать SQL. Все остальное (в том числе алогритмы и байтоебля) относится к предметной области и обязательно к изучению только в том случае, если ты с этим будешь работать (никому нахуй не интересно, знаешь ли ты все виды сортировок, если ты пишешь GUI - просто юзаешь стандартный квиксорт и чувствуешь себя сухо и комфортно). Знание фреймворка(ов) будет большим плюсом (в том числе потому, что помогает понять, как делаются настоящие большие проекты).
Вот, собственно, и все. Выбирай, чем ты хочешь заниматься, и вперед. Погромирование - инструмент, а не самоцель. Оно помогает решать задачи в предметной области, а потому надо исходить из цели, а не из инструмента. Может так статься, что ты через полгода будешь писать на жабе или на, прости г-споди, руби. Не зацикливайся на инструменте.
Подтверждаю. Но только для новичка. Для того, кто умеет внятно объяснить отличие ссылки и указателя в прате ничего нового и интересного не найдется. Начинал с него, когда только учился крестам и погромированию вообще, недавно пролистал новое издание - вообще ничего интересного. Лучше потратить время на написание еще одного велосипеда.
Есть как бы три уровня погроммирования.
1. Просто знать синтаксис языка, самые основные правила, чтобы не выстрелить себе в ногу, и уметь написать говнопрограмму из 100 строчек. Для этого можно читать вообще любой учебник для нюфагов, ибо они отличаются только глубиной разжевывания фич, да и то не сильно. Для крестов очень хорошие - Шилдт, Лафоре, Прата. Я в свое время читал Шилдта и рекомендую его, но тут рли разницы нет, читай любую.
2. Собственно погроммирование более высокого уровня, решение всяких небольших задач, но изящно и/или оптимально. Написание консольных утилит и олимпиадки из этой серии. Именно этому учат в нормальном универе, изучить сами кресты тут недостаточно. Нужно дрочить алгоритмы и много практиковаться, чтобы накопить собственную коллекцию фич. Из-за маленького объема кода на этом уровне ты можешь игнорировать паттерны, тестирование и прочие атрибуты НАСТОЯЩЕЙ РАЗРАБОТКИ.
3. Разработка ПО. Обычно у всяких олимпиадников при переходе на этот уровень происходит разрыв шаблона, ибо в универе этому не учат вообще, и оказывается, что навыки экономии байтов нужны редко, а вместо олимпиадки, где ты пишешь только интересную часть программы без обработки ошибок, тупых пользователей, и вообще задача околоматематическая и небольшая, нужно хуярить проект на миллион строк, в котором самой сложной структурой данных будет красно-черное дерево. Да и за его реализацию ПМ даст пизды, потому что оно есть в STL. Основные навыки - писать понятно и безопасно, даже в ущерб производительности, не изобретать велосипеды, работать в команде с другими погроммистами VCS и вот это все. И вот здесь тебе понадобятся книжки в духе "33 паттерна", "Как перестать говнокодить и начать жить", ну ты понел. Иначе ты будешь писать лютый говнокод, который будет сложно поддерживать. Более того, в большом коммерческом проекте ошибки дорого стоят, поэтому нужно помнить фичи, которые на уровне 2 бы показались полным ебланством гугли RAII и COW. В списке >>497140 здесь все книжки, кроме Шилдта, относятся, скорее, именно к этому уровню, хотя их недостаточно, разумеется.
Есть как бы три уровня погроммирования.
1. Просто знать синтаксис языка, самые основные правила, чтобы не выстрелить себе в ногу, и уметь написать говнопрограмму из 100 строчек. Для этого можно читать вообще любой учебник для нюфагов, ибо они отличаются только глубиной разжевывания фич, да и то не сильно. Для крестов очень хорошие - Шилдт, Лафоре, Прата. Я в свое время читал Шилдта и рекомендую его, но тут рли разницы нет, читай любую.
2. Собственно погроммирование более высокого уровня, решение всяких небольших задач, но изящно и/или оптимально. Написание консольных утилит и олимпиадки из этой серии. Именно этому учат в нормальном универе, изучить сами кресты тут недостаточно. Нужно дрочить алгоритмы и много практиковаться, чтобы накопить собственную коллекцию фич. Из-за маленького объема кода на этом уровне ты можешь игнорировать паттерны, тестирование и прочие атрибуты НАСТОЯЩЕЙ РАЗРАБОТКИ.
3. Разработка ПО. Обычно у всяких олимпиадников при переходе на этот уровень происходит разрыв шаблона, ибо в универе этому не учат вообще, и оказывается, что навыки экономии байтов нужны редко, а вместо олимпиадки, где ты пишешь только интересную часть программы без обработки ошибок, тупых пользователей, и вообще задача околоматематическая и небольшая, нужно хуярить проект на миллион строк, в котором самой сложной структурой данных будет красно-черное дерево. Да и за его реализацию ПМ даст пизды, потому что оно есть в STL. Основные навыки - писать понятно и безопасно, даже в ущерб производительности, не изобретать велосипеды, работать в команде с другими погроммистами VCS и вот это все. И вот здесь тебе понадобятся книжки в духе "33 паттерна", "Как перестать говнокодить и начать жить", ну ты понел. Иначе ты будешь писать лютый говнокод, который будет сложно поддерживать. Более того, в большом коммерческом проекте ошибки дорого стоят, поэтому нужно помнить фичи, которые на уровне 2 бы показались полным ебланством гугли RAII и COW. В списке >>497140 здесь все книжки, кроме Шилдта, относятся, скорее, именно к этому уровню, хотя их недостаточно, разумеется.
Лол, даже не представляю как, понимая это, можно не испытывать отвращение к программированию и так спокойно это всё писать, будто даже норм и к этому надо стремиться.
Вот молоток - это штука для забивания гвоздей. Тупейшее устройство чтобы долбить им по шляпке. Начинай теперь испытывать отвращение к молотку. Аналогию понял?
Да, но лично мне непонятно как можно увлекаться молотками, читать про них книжки, обсуждать их на борде блять, вообще пушка. Я сюда хожу чисто попиздеть и поностальгировать, а вот хули вы здесь забыли - неясно.
А хули "мы". Я анону помогаю, да дебилам с лабами в ротешник ссу. Книжки читаю только тогда, когда хочу узнать новый способ использования молотка для какой-то конкретной задачи. В остальное время просто заколачиваю гвозди, строя то, что мне требуется.
Ну дык, няш. Есть манямирок, а есть реальность. От того, что ты будешь внушать себе, что в индустрии все охуенно, на самом деле охуенно не станет. Только адекватно оценивая ситуацию, можно приспособиться. И да, на самом деле это только звучит страшно. Если ты шаришь, то даже не будешь задумываться об этой хуйне. Это как с велосипедом, например, сложно только в начале, а потом берешь и едешь.
Два std::set <Tea> этому благородному дону.
Пиши велосипеды. Ты должен понимать как устроены и работают сущности - алгоритмы, структуры данных. Возьми курс SICP или Седжвика и пиши всё подряд.
Да причём здесь это. Я про то, что если это тупо вьёб, то хули тут интересного, и про что тут говорить? Лучше б книжки почитали, или аниме посмотрели, или там спортом занялись. Это ж куда увлекательнее молотка. Алсо, если из таких позиций исходить, то это даже вредно, тк кодинг такая область где любой сеанс чтения хотя бы на полчаса в день очень быстро делает тебя оверквалифаед забивателем гвоздей, так что тебе некуда все эти знания девать будет. Не, ну может и есть конченые дибилы которым реально надо всё время учиться, просто чтобы не уволили, но среднему кодеру того что он нагуглит непосредственно во время решения задач на работе будет даже гораздо более чем достаточно для того чтоб продолжать получать не просто те же деньги, но ещё и идти на повышение, в случае, если он ещё не достиг кодерского потолка где-то так в 4к.
> Скажи одну единственную книгу перед Страуструпом если ни разу не прикасался к прогерству.
K&R
А хуле интересного автолюбители находят в ковырянии в гараже? Лучше в сервис тачку сдать и пива бухнуть, епты! В тянках хуле интересного? У той пизда, и у этой пизда, одну выебал и хватит, дальше ничего нового. Алсо, про книжки и аниму тоже нечего говорить. Ты посмотрел, он посмотрел, ну и все, какая польза от обсуждения? Да и смотреть/читать тоже бесполезно, там же все не как в жизни. Ну ты понел.
ом-ном-ном
Увы, но он живее всех живых.
исправь в 5 строке char str на char *str
[CODE]void output(const char* s) {
while(s != '\0') {
std::cout << s++;
sleep(10);
}
}[/CODE]
>using namespace std;
>c-like строки
>while с костылями вместо for (auto chr : str)
>глобальная функция с undercase именем
>"=" без пробелов
Просто СЪЕБИ.
[code lang="cpp"]
void delayedPrint (std::ostream & out, const std::string & input)
{
\tstd::for_each (input.begin (), input.end (), [] (const char & chr)
\t{
\t\tout << chr;
\t\tstd::current_thread::sleep_for (std::chrono::milliseconds (10);
\t});
\tout << std::endl;
}
[/code]
auto start = std::chrono::high_resolution_clock::now ();
std::thread thr ([=] () {});
thr.detach ();
auto finish = std::chrono::high_resolution_clock::now ();
std::cout << (std::chrono::duration_cast <std::chrono::milliseconds> (finish - start)).count () << std::endl;
Проверял на MinGW. Либо оно убирает (из-за оптимизаций, хотя я поставил -O0) все к чертям, либо протсо это все отрабатывает меньше чем за наносекунду (не говоря уж про милисекунды). Комп такой: https://www.asus.com/Notebooks_Ultrabooks/N56VZ/
Ну охуеть теперь, проверять производительность наносекунд.
Чем заниматься наноизмерениями, лучше создай 9000 таких тредов в цикле и раздели результат на 9000.
Не все ли потеряно, если мне через месяц 22 и я на начале лвл 2? По спецухе инженегр, кресты нужны для всяких конечно-элементных матанов.
Лафоре или Прата.
Спасибо, няш, добра тебе. Потом проверю в цикле еще, но пока можно считать, что оно быстро создается. А то я чота внезапно сел на измену из-за подозрений в медлительности и стал придумывать, как поточный пул подружить с std::async, лол.
Если постараешься, энивей сможешь выгодно отличаться от среднестатистической макаки.
char haystack[7] = "abcdef"; // это уже есть в исходнике
Пробовал добавить
char needle[5] = "abcd";
и потом strstr(haystack, needle);
но нихуя не работает. Как будет правильно?
А не, все нормально. Поздно уже, в глаза долблюсь.
Говно vs моча vs конча.
На хуй иди.
[code]int (ptrm)[5];
ptrm = new int(*)[5];[/code]
но компилятор не хочет, отказывается. Как быть? Вопрос чисто теоретический.
Пробовал. Переставлял скобки, как только мог. Всё равно подчёркивается знак равно. Когда навожу курсор, пишет, что int °° нельзя присваивать int (°) [5]. Ещё пробовал вот так: ptrm = new (int (°) [5]). В таком случае компилятор пишет, что int (°°) [5] нельзя присвоить int (°) [5].
А. Так, нельзя делать. Твой ptrm это кусок памяти на стеке, он не может стать указателем на кусок памяти в хипе. Но туда можно вписать новые данные с помощью placement new. https://ideone.com/jXv6pK
Что-то я не очень понял. А при чем там массив указателей? Наверно, стоит немного подробней расписать, что я хочу сделать.
[code]int (*ptrm)[5], m[5];
ptrm = &m;[/code]
Здесь я присваиваю адрес какого-то конкретного массива. То есть у меня получается указатель на весь массив, а не на первый элемент. А возможно ли операцией new сделать тоже самое? Это и у меня и не получается.
Хотя я тут подумал. При моём объявлении (°ptrm) будет эквивалентно m, то есть статическому массиву. Тогда логично, что его не получится инициализировать через new, но в то же время ptrm значения присваивать можно. Кажется, я понял. Складывается ощущение, что я сказал то же самое, что и (>>499785). Или я не прав?
Работает. Хм. А что это вообще такое? Где про это почитать можно?
Долбоеб. int (*prtm) [5] это "prtm есть указатель на массив из пяти интов". А ты создаешь через new "указатель на указатель на массив из пяти интов".
Во-первых, ты желаешь странного, ибо имя массива эквивалентно не считая тонкостей константному адресу его первого элемента. То есть, ты получаешь как бы указатель на указатель на первый элемент, но нахуя? Эта прослойка не нужна. Во-вторых, объявление new для типа T схематично выглядит так: T operator new (). То есть, если ты выделяешь место массиву экземпляров T, то вернется указатель на его первый элемент, в твоем случае элементы массива сами являются указателями, то есть, это будет int . Но вспоминаем, что массив это по сути T const, то есть, единожды созданному ты уже не можешь присвоить новый адрес. И это логично, потому что ему на стеке выделяется место для пяти интов, и если потом вдруг массив станет смотреть не на них, то они утекут, а деструктор для массива не обязательно совместим с delete [], которым положено очищать массив, выделенный через new. >>499823 здесь использовано функциональное приведение, скорее всего, оно дойдет до reinterpret_cast и заменит адреса бездумно. Работать это может, но далеко не обязано, ибо неопределенное поведение. В третьих, >>499785 кун прав, в рамках ровно такой задачи лучше всего сделать так. Но это таки неестественная и извращенная хуйня, поэтому, в четвертых, используй контейнеры std::vector и умные указатели и не еби достопочтенным плюсогосподам мозги.
Звездочки просрались, ну и похуй.
Сам ты долбоёб. Я ньюфаг. Мысль понял. Разницу почувствовал.
>>500075
>ты получаешь как бы указатель на указатель на первый элемент
Ну да, и хочу его инициализировать.
>но нахуя
Для себя. Чтобы понять суть работу всей этой хуйни.
>используй контейнеры std::vector и умные указатели
С радостью. Но всё же интересно копнуть немного поглубже. Хотя постепенно, я думаю, придёт понимание таких деталей.
То есть, как я понял, у меня не получится через new выделить память для указателя на пять интов?
[code]int (p)[5];
p = new (int()[5]); // не работает и нет способа заставить?
int (p)[5];
p = new (int(*)[5]); // работает[/code]
Или это будет в виде, если учитывать что в ncurses 8 цветов, в виде ебического case?
Хочу что-то написать функцию вида:
drawCharLikePixel (int x, int y, color_foreground, color_background)
{
^- это макросы, какой тип?
}
Читай документацию, одним постом не объяснишь.
[CODE lang="cpp"]
// Есть два ветора:
vector<uint8_t> compressedData; // Сжатые данные, размер известен
vector<uint8_t> uncompressedData; // Вектор для распакованных данных, размер после распаковки заранее известен
unsigned long uncompressedDataSize = 1234567; // Собственно вот и он
uncompressedData.reserve(uncompressedDataSize); // Выделяем память
uncompress(&uncompressedData[0], &uncompressedDataSize, &compressedData[0], compressedData.size()); // Пытаемся распаковать compressedData в uncompressedData
[/CODE]
И самое забавное в том, что до uncompress uncompressedData.capacity() показывает верный размер резерва, а вот после - уже нуль...
потому что reserve не всегда выделяет память. Используй либо resize(), либо конструктор с указанием размера vector<uint8_t> udata(size)
А что uncompress возвращает? Не ошибку. Попробуй к данным вектора получать доступ черед .data() твой способ возможно хуита, operator[] же метод, когда он возвращает нулевой елемент он скорее всего создает копию и ложит ее на стек, и беря адрес возвращаемого элемента ты берешь адрес временной переменной на стеке вызовов, а не адрес начала данных вектора.
> потому что reserve не всегда выделяет память. Используй либо resize(), либо конструктор с указанием размера vector<uint8_t> udata(size)
И правда, теперь uncompressedData полный нулей, лол.
>>500811
> А что uncompress возвращает? Не ошибку.
Точно, совсем забыл что он возвращает что-то.
Выдаёт Z_DATA_ERROR. Что с operator[], что с .data().
Посмотрел первые 2 байта в compressedData - 78 9C.
Таки там zlib с дефолтной компрессией, а то я уже начал было сомневаться...
Попробуй для теста выгрузи входной вектор в массив и отдай массив. Проблема с данными же. Входной вектор тоже черз data() передавал?
Я заполнял вектор из файла с помощью istream_iterator, в итоге файл читался не до конца.
Починилось через .unsetf(ios::skipws)
>>500837
Теперь работает и через &vector[0] и через vector.data()
он возвращает ССЫЛКУ на нулевой элемент и никаких копий никогда не создает.
Ты не совсем понял видимо, няш. Нет понятия "указатель на пять интов". Есть "массив из пяти интов", он выделяется только на стеке (не в куче, не через new), а после выделения эквивалентен константному указателю на инт. Ты можешь с помощью new выделить место для указателя на указатель на инт, тогда в куче отведется место для единственного указателя (а не содержимого по его адресу), а тебе вернется указатель на эту область памяти, смекаешь? Потом ты можешь отдельно создать массив из пяти интов на стеке, а его адрес положить в то место в куче, типа:
[code lang="cpp"]
int array [5];
int ptr_to_ptr = new int ;
ptr_to_ptr = array;
[/code]
Теперь у тебя фактически ptr_to_ptr это указатель на массив из пяти интов, но его типом как был указатель на указатель на инт, так и остался. Такие дела.
Есть два стула. MSVS 2013 это последний оффициальный тм релиз, стабильный. Есть MSVS 2015 Release Candidate, по факту это то, что станет релизной версией MSVS 2015. Там много новых плюшек наподобие инструментов рефакторинга, но могут быть баги, хотя вряд ли. Естественно, тебе нужна 2013 версии Ultimate либо 2015 RC версии Enterprice.
>Есть "массив из пяти интов", он выделяется только на стеке (не в куче, не через new)
штобля? auto x = new int[10]; ← это что бля?
>Нет понятия "указатель на пять интов".
а не пиздишь? http://ideone.com/AB31yZ
1. Лолблядь. Ну подведи мышку-то к auto, и увидишь, какой там на самом деле тип. Повторюсь, понятие массива - это еще с C одна большая обертка над int const, который указывает на какой-то инт, за которым гарантируется последовательное размещение вплотную еще нескольких интов по числу элементов в "массиве". Обращение к ним по array [ctr] из той же серии, оно сразу преобразуется в разыменование array + ctr, это синтаксически эквивалентная конструкция, которая запилена для удобства школьников, пришедших с паскаля. Само понятие массива стандартом определено только для автоматических и глобальных переменных. new просто не умеет оперировать понятием "массив", она выделит место для пяти интов подряд и вернет указатель на первый. Этот указатель потом можно запихнуть в константый указатель, и после этого работа с ним не будет отличаться от работы с массивом, можно писать ptr [ctr] и все дела. Но это не будет массивом, тем не менее, потому что само определение массива предполагает автоматическое выделение памяти на стеке и инициализация указателя, который скрыт под оберткой массива, ее адресом. А поскольку он константный, ты уже не сможешь его сделать указывающим на что-то, выделенное в куче, даже если это несколько интов подряд.
2.
[code lang="cpp"]
class TvoyaMamka {};
TvoyaMamka ptr;
[/code]
Видишь, у нас есть указатель на твою мамку. Но это не часть языка, а вновь описанная сущность, не имеющая никакого отношения ко встроенным типам данных. С typedef то же самое.
Расшатанное обезьяной говно, там же только одна звездочка была, епту. В первой строке int * const.
[code lang="cpp"]
std::vector <int> vect;
vect.resize (5);
std::unique_ptr <int > ptr_to_ptr = std::make_unique <int > ();
*ptr_to_ptr = vect.data ();
[/code]
>понятие массива - это еще с C одна большая обертка
съебал нахуй, дебил блядь
массив это сущность, школьник сраный
>само определение массива предполагает автоматическое выделение памяти на стеке
блядь, мозг рака
а тебе дал пример выше дебилушка, http://ideone.com/AB31yZ
[code]
typedef int pyat_intov[5];
typedef pyat_intov* ukazatel_na_pyat_intov;
ukazatel_na_pyat_intov kakaya_to_peremennaya = new pyat_intov[4];
[/code]
какой тут стек, нахуй? что ты несешь вообще? вообще охуеть
Записываясь на курсы, кандидат должен знать следующие темы C++:
- типы данных;
- переменные, области видимости;
- операторы «выражение», ветвления, цикла, передачи управления;
- массивы, указатели;
- функции, процедуры, формальные параметры;
- перечисления (enum);
- структуры (struct);
- классы (class).
Так вот вопрос. Если я эти 2 месяца учил Java Core и задрачивал квизы, то за сколько реально выучить все из этого списка по C++? Языки же вроде похожи.
За полчаса, если знаешь жабьи аналоги.
Доброго времени суток!
В QT есть замечательный контейнер QSet, отвечающий за множества, и мне нужно научиться передавать эти контейнеры, как аргументы функций, и научить функции возвращать множества, как результат. Напрямую не получилось, теперь думаю работать с указателями.
Это вообще возможно, и если возможно, то как?
Час где-то. Ты там все должен знать кроме указателей и классов. Ну и перечисления там в джаве вроде другие немного.
Указатели. Передаешь, возвращаешь. Лучше конечно с сылками работать, но там куча нюансов. Сделай сейчас на указателях и разбирайся с ссылками - там конструкторы копирования, move семантика это все.
>Нет понятия "указатель на пять интов"
Давай по порядку. int m[5] — это массив из пяти интов. m — указатель на первый элемент массива, то есть то же самое, что и &m[0]. А вот &m (ВНЕЗАПНО равный m) — это адрес всего массива и именно из из пяти элементов. Разница между ними будет проявляться при арифметике: m + 1 = &m[1], а &m + 1 = (по факту) &m[6]. А, ещё sizeof разные результаты будет возвращать.
запутали_ньюфага_окончательно
>сущность
>обертка
Никакого противоречия же. Синтаксический сахар в чистом виде. Я даже не поленюсь открыть стандарт и накормить тебя хуями:
4.2.1 An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue
of type “pointer to T”. The result is a pointer to the first element of the array.
8.3.4.6 Except where it has been declared for a class (13.5.5), the subscript operator [] is interpreted in such
a way that E1[E2] is identical to *((E1)+(E2)).
>пример
В твоем примере нет сущности "массив". И стека нет поэтому. Ты просто выделяешь место в куче для четырех последовательных объектов, они не будут массивом:
5.3.4.5 Note: both new int and new int[10] have type pointer to int.
А твой пример вообще не скомпилируется, дауненок, ты же пытаешься присвоить указатель на инт указателю на указатель на инт. Тайпдефы разжижают мозг, агагагаг.
Ну что ты, браток, все ж мы люди. Хочешь, расскажу, как я шаблонный класс писал? Написал-то я его быстро, минут десять всего. Ну а потом поебалися.
Потому что просто хобби. На сперму самое то.
Спасибо!
Я тут почитал, она, что ли, с браузера или как-то так работает?
Только я не понял чем десктоп от виндовс отличается.
>А твой пример вообще не скомпилируется, дауненок, ты же пытаешься присвоить указатель на инт указателю на указатель на инт.
дебилушка не может даже открыть ссылку или скомпилировать самостоятельно?
>can be converted
это переводится как "может быть преобразовано", даун ебучий
>В твоем примере нет сущности "массив".
а что такое за тип pyat_intov?
>Ты просто выделяешь место в куче для четырех последовательных объектов, они не будут массивом
это будет двумерным массив, сын идиотки
имбецил сраный, если у тебя char может быть сконверчен к int'у, то это не значит что это одинаковые типы
пошел вон из профессии, мудило
У меня десктоп. виндовс вроде для разработки на windows phone и маркет 8.1. Точно уже не помню.
если создалось что-то под названием массив, то это либо объект (тогда где его конструктор?) либо примитивный тип (тогда почему его нет в жестко регламентированном списке примитивных типов?) либо функция (без комментариев). какая-то хуевая у тебя концепция выходит - создалось непонятно что из нескольких чисел в куче, new вернул указатель на число, а ты кукарекаешь про какие-то массивы. говна наверни в общем, манька паскальная
Там обязательно иметь микрософт аккаунт? А то при загрузке меня на регистрацию кидает.
Visual Studio Community 2015 - бесплатная и со всеми фичами. Плюс еще и с++11 доработан.
сам наверни говна
3.9.2 Compound types
[basic.compound]
Compound types can be constructed in the following ways:
— arrays of objects of a given type, 8.3.4;
— functions, which have parameters of given types and return void or references or objects of a given
type, 8.3.5;
— pointers to void or objects or functions (including static members of classes) of a given type, 8.3.1;
— references to objects or functions of a given type, 8.3.2;
— classes containing a sequence of objects of various types (clause 9), a set of types, enumerations and
functions for manipulating these objects (9.3), and a set of restrictions on the access to these entities
(clause 11);
— unions, which are classes capable of containing objects of different types at different times, 9.5;
— enumerations, which comprise a set of named constant values. Each distinct enumeration constitutes a
different enumerated type, 7.2;
45)
— pointers to non-static
class members, which identify members of a given type within objects of a
given class, 8.3.3.
далее твой ротик я обрабатываю мочой из примеров из стандарта:
[code]
typedef int A[5], AA[2][3];
typedef const A CA; // type is ‘‘array of 5 const int’’
typedef const AA CAA; // type is ‘‘array of 2 array of 3 const int’’
[/code]
сам наверни говна
3.9.2 Compound types
[basic.compound]
Compound types can be constructed in the following ways:
— arrays of objects of a given type, 8.3.4;
— functions, which have parameters of given types and return void or references or objects of a given
type, 8.3.5;
— pointers to void or objects or functions (including static members of classes) of a given type, 8.3.1;
— references to objects or functions of a given type, 8.3.2;
— classes containing a sequence of objects of various types (clause 9), a set of types, enumerations and
functions for manipulating these objects (9.3), and a set of restrictions on the access to these entities
(clause 11);
— unions, which are classes capable of containing objects of different types at different times, 9.5;
— enumerations, which comprise a set of named constant values. Each distinct enumeration constitutes a
different enumerated type, 7.2;
45)
— pointers to non-static
class members, which identify members of a given type within objects of a
given class, 8.3.3.
далее твой ротик я обрабатываю мочой из примеров из стандарта:
[code]
typedef int A[5], AA[2][3];
typedef const A CA; // type is ‘‘array of 5 const int’’
typedef const AA CAA; // type is ‘‘array of 2 array of 3 const int’’
[/code]
Да думаешь я помню. Вообще, вроде нет, ибо у меня тогда была учётка для Windows Phone.
Пишу в виме, компилю в gcc или clang в зависимости от того, на какой платформе пишу.
>дебилушка не может даже открыть ссылку или скомпилировать самостоятельно?
>ты че сука охуел штоле какие еще предупреждения компилятора отключи их нахуй че как ссыкло епту
Ну, если так рассуждать, то все указатели одинаковые, раз компилятор их может привести друг к другу.
>может быть преобразовано
Именно. И еще второй абзац. В сумме это дает как раз понятие "обертка". Для долбоебов - "А есть обертка В" ~ "над В допустимы все операции, допустимые над А, и при трансляции А реализуется при помощи В".
>это будет двумерным массив
Кое-то не знает разницы между многомерными массивами и неровными массивами, лол.
>это не значит что это одинаковые типы
Чар конвертится неявно в инт => везде чар может использоваться вместо инта.
Массив конвертится неявно в указатель => везде массив может использоваться вместо указателя.
Оба утверждения повторяют первую часть определения обертки. Я не понимаю, лалка, ты нахуя берешь очевидные вещи, сдабриваешь их руганью и пытаешься сделать вид, что они доказывают что-то противоположное?
У меня Dreamspark.
Ставь 2015. Я бы тоже поставил, но пока не до этого.
Нет ничего лучше или хуже, дело вкуса. Попробуй Visual Studio 2015, не понравится — ищи другую IDE.
>составные типы
>примитивные типы
почувствуй разницу, щенок. и ты за мифические массивы в куче не ответил. new возвращает по ним указатель, где же твой б-г?
А кто-нибудь в курсе, кстати, когда релиз у нее? Не хочу ставить RC, потом сносить еще придется лишний раз.
>>ты че сука охуел штоле какие еще предупреждения компилятора отключи их нахуй че как ссыкло епту
быстро взял и показал где там ворнинги
>Ну, если так рассуждать, то все указатели одинаковые, раз компилятор их может привести друг к другу
ты дебил? implicit conversion для указателей нет
>при трансляции А реализуется при помощи В
господи, что за хуйню я читаю?
>Кое-то не знает разницы между многомерными массивами и неровными массивами, лол.
ты?
>Чар конвертится неявно в инт => везде чар может использоваться вместо инта.
съебал из профессии, быдло. переполнениями обмазываться будешь, когда тебя никто не видит, мразь
>везде массив может использоваться вместо указателя
ой блять, у тебя рак
Ем говно, испражняюсь дерьмом или мочой в зависимости от того, с какой стороны.
Так, окей, а как работать с указателями на контейнеры? Как динамически выделять для них память?
>и ты за мифические массивы в куче не ответил
не ебись в глаза, школомразь: http://ideone.com/AB31yZ
или ты так и будешь орать ВРЁТИИИ?
Но ведь надо указывать, какого типа будет множество. Т.е.
QSet<QString> *set = new QSet<QString>()?
>переполнениями обмазываться будешь
Покажи мне метод, который принимает int, но не может принять char без переполнения.
>implicit conversion для указателей нет
>сарказм? какой сарказм?
Я это и имел в виду, дурачок. Неявно не преобразуются, вот предупреждения (пикрелейтед 1).
>ты?
К несчастью для тебя, нет.
>господи, что за хуйню я читаю?
Рекомендую пикрелейтед 2.
Ничего из этого. Серьезно. Я еще удаляю половину дерьма что он по умолчанию ставит.
Даже фаундейшн С++ классы? Мне кажется что они важны.
Если места много, ставь всё. Потом сам разберёшься, что нужно, а что нет.
>Покажи мне метод, который принимает int, но не может принять char без переполнения.
>везде чар может использоваться вместо инта
ты болен мозгом рака?
>Неявно не преобразуются, вот предупреждения (пикрелейтед 1).
спермовор не человек. пользуйся нормальными компиляторами, а не индусскими отбросами
>Рекомендую пикрелейтед 2.
мудачок, тогда все языки программирования суть синтаксический сахар над байтиками.
а вопрос изначально был об отсутствии идентичности (с точки зрения плюсом) между массивами и указателями
обтекай короче
Какой же ты тупой, блядь. Господи, спаси грешную душу этого убогого, ибо он не ведает хуйни, которую несет.
Ладно, давай по-другому. Ты считаешь, что в твоем примере kakaya_to_peremennaya указывает на мифический "массив в куче"? Да? А вот компилятор улыбается и кладет хуй тебе на лобешник. Гляди сюда, болезный, видишь, какой тип после разыменования? Массивом и не пахнет.
И еще, как множество выводить? Стандартный способ, как в документации, т.е.
QString buf // строка для вывода множества;
QSet<QString> str = new QStr<QString>;
QSetIterator<QWidget > i(str);
while (i.hasNext()) buf << i.next();
Грит
ошибка: no matching function for call to 'QSetIterator<QWidget>::QSetIterator(QSet<QString>&)'
QSetIterator<QWidget > i(str);
^
str, естественно, указатель.
GitHub я бы поставил, хотя из консоли тоже удобно. Остальное хуета на мой взгляд.
>Какой же ты тупой, блядь. Господи, спаси грешную душу этого убогого, ибо он не ведает хуйни, которую несет.
себя отпевай, хрюс
>Гляди сюда, болезный, видишь, какой тип после разыменования? Массивом и не пахнет.
и ты опять насрал себе в штаны, показав implicit conversion между массивами и указателями: http://ideone.com/NKsY1X
>А вот компилятор улыбается
на пике IDE, даунит спермоворный
>на пике IDE
Если ты думаешь, что после раскрытия auto непосредственно компилятором там будет что-то другое, то у меня для тебя плохие новости.
>и ты опять насрал себе в штаны
Ты полтреда сидишь на большой куче говна внутри кальсон и визжишь, что все вокруг соснули, хотя сам же запилил пример, который выводит int and x is 1 и показывает твой эпичнейший обосрамс.
>implicit conversion между массивами и указателями
Воистину, это так, я об этом говорил еще здесь >>501589, ебанько ты пиздоглазое. Не преобразуются твои говнотайпдефы только. И к твоему примеру отношения не имеет. char y; auto x = y каким типом x сделает? Правильно, упоротый кусок говна, это будет char ! Знаешь почему char, а не int, не double, не твоя мамаша-шлюха, описанная с соответствующим конструктором из char? Потому что похуй, к чему char неявно приводится, auto поставит настоящий тип. В твоем примере то же самое, имбицил, и способность массивов приводиться к указателям не играет никакой роли. x указатель на инт не потому что к нему что-то неявно привелось, а потому что kakaya_to_peremernnaya и есть указатель на инт, блядь. Какой же ты даун, если этого не понимаешь даже с таким подробным объяснением, просто пиздец. Возможно, тебе стоит временно прикрыть этот невыносимый поток хуеты, прочесть хотя бы какой-нибудь крестоучебник а-ля "кресты для нюфань за 21 день", или перейти на язык с динамической типизацией, если не можешь осилить элементарные вещи, ну или просто СЪЕБАТЬ и не смешить людей своим кукареканьем в серьезном треде.
Все верно. Там есть нюансы касательно sizeof (). Если хочешь, можешь почитать стандарт, там нормально описано. Если вкратце - после первой же операции или присваивания чему-то еще размер станет неизвестным. Это происходит потому что размер массива - характеристика имени, а не адреса. А поскольку массивы не присваиваются напрямую, можно сохранять размер при ручном копировании в новый массив только объявляя его как T new_arr [sizeof (old_arr)] или что-то подобное делать.
>говнотайпдефы
ну пизда ты сейчас огребаешь
если ты не понимаешь типизацию в плюсах, то пиздуй в детский сад, мразь. именно там рассказывают про типы, implicit/explicit приведения и прочие важные вещи
>auto x = y каким типом x сделает?
согласно ПРАВИЛАМ TEMPLATE ARGUMENT TYPE DEDUCTION, имбицил позорный
>auto поставит настоящий тип
сэр пидор ебаный не знает даже про decltype(auto), гнида ты подшконочная?
>потому что ∗kakaya_to_peremernnaya и есть указатель на инт, блядь.
пидор гнойный, это lvalue reference, ты не можешь поменять адрес здесь, гнида паскудная
ты хотя бы сначала код смотрел, потом думал, а потом постил свои ничтожные высеры. там же блядь напрямую через std::is_same сравнение делается, глазоёб сраный
>Возможно, тебе стоит временно прикрыть этот невыносимый поток хуеты, прочесть хотя бы какой-нибудь крестоучебник а-ля "кресты для нюфань за 21 день", или перейти на язык с динамической типизацией, если не можешь осилить элементарные вещи, ну или просто СЪЕБАТЬ и не смешить людей своим кукареканьем в серьезном треде.
ТЫ УЖЕ ДОКАЗАЛ СВОЁ ЕБУЧЕЕ НЕЗНАНИЕ ОСНОВ, ПИТОНИСТ СРАНЫЕ
СЪЕБАЛ НА СВОЮ ДЖАНГУ-ХУЯНГУ, ОТБРОС ДИНАМИЧЕСКИЙ, ПОХАПИСТ АССОЦИАТИВНЫЙ!
А вот какие тонкости есть, епт.
Я QSet<QString> str создавал, как поле класса MainWindow, чтобы к нему и обращаться со всех кнопок на форме, причем когда создаю указатель на контейнер, то все ок, собирается, а когда создаю сам объект, то говорит, что неверный тип.
Тебе рано использовать библиотеки и фреймворки, выучи основы языка сначала.
Нельзя изменить значение ссылки, сам объект можно. Но старайся использовать const везде где сможешь.
Для унифицированного доступа к stl контейнерам. Скрывают детали реализации доступа к элементам.
Написал простенький код из книги, обсмотрел программу, не нашёл компиляции.
Есть какое-то непонятное присоединение.
При чем, есть какая-то странная компиляция - ктрл + Ф7, но программа выдает непредвиденные ошибки.
Я вижуалом в общем-то не пользуюсь, но:
Судя по всему, ты просто создал файл cpp, а должен создать проект. Тогда
файл -> создать проект -> С++ - пустой проект -> обозреватель решений -> "файлы исходного кода" -> создать элемент -> Файл c++
Там пишешь свой код. Должно заработать.
Cпасибо.
А чем файл от проекта отличается?
Вроде и там и там .сср файлик и всё. Хотя, в проекте, вроде, еще шапка есть.
Проект это, грубо говоря, список файлов + настройки для сборки этих файлов.
> Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
У меня одного он не работает?
Вот: Source2 и Source.
Запускается, но, только странно: запускается код с окна Source, а не Source2.
Как я понял они одновременно выполняются?
Да, я поменял функцию, но если я запускаю - выполняется только source, который я 1 написал и сохранил. А сурс2 выполняется только если я всё удалю в сурс1.
Один проект — одна программа.
А вот хрен я что придумал нормального с сылками.
Зато сделал с указателями неплохой рабочий вариант.
В описани формы указатель на множество, все кнопки принимают этот указатель и возращают его же, и отлично все собралось и работало.
Говнокод конечно форму засорять лишними данными, но это лаба, так что похуй.
А вот на что не похуй, так это как с формой связать логику программы в, скажем, main?
Вот есть данные в main, и есть отдельная форма с исходниками и отдельным ui, так как научить форму обращаться к данным в main и наоборот?
Ссылка это разыменованный указатель. Если не нужен нулевой указатель, можно легко менять на ссылку. А тебе надо почитать хотя бы c++ за 21 день. Или шилдта. И учебник по кутэ, на сайте есть достаточно туториалов.
Пиздец, я дожил до того дня, когда школьники спрашивают про логику уже после создания ФОРМОЧЕК.
миморисовал окна попиксельно в TurboPascal под DOS в твоем возрасте
Передаешь ссылки/указатели на структуры данных из main при создании формы или потом в методах. Почитай про MVC.
Он теперь сюда придёт всякую херню про мвц спрашивать
Поясните мне по хардкору сакральный смысл private и protected. В смысле - нахуя они всё же нужны на практике? Хипстерота в инторнетах упорно твердит подхваченные откуда-то выражения в стиле "public variables = bad programming practice", ничем эти слова не подкрепляя. А у меня в рабочем коде высоконагруженного приложения на сотню тысяч строк ни разу не встречаются эти два слова. Слово class тоже не встречается, если что. Всё делаю через struct, все переменные публичные - и всё работает заебись, держит ~20000 одновременно подключенных клиентов, не течёт, не сбоит.
А мне говорят - bad programming practice. Соответственно в очередной раз возникает вопрос - а нахуя всё же, если без них работает лучше?
Дело не в том, как хорошо это работает, а в том, как потом такую систему расширять и дорабатывать. Если архитектура прозрачна для чтения — любая макака поймет что твой код делает. Если ты на с++ все хуячишь в си-стайле, то тут уже попахивает чем-то нездоровым.
Да с ахритектурой вроде всё нормально и понятно, расширяли и дорабатывали не раз уже. Для себя же пишем, нам проблемы с говнокодом не нужны.
Я просто никогда не понимал этой блядской практики делать переменную закрытой и писать отдельные функции для того, чтобы писать и читать в неё. Компиляторы цпп не предполагают обычно, что программист идиот, и честно ставят лишние JMP. А если у тебя пара миллионов обращений к такой переменной за цикл? Алсо оптимизация работы с завуалированными таким образом даннми идёт по пизде обычно.
>Компиляторы цпп не предполагают обычно, что программист идиот
Функция вроде геттера будет 100% заинлайнена, с точки производительности разница небольшая.
Ну вообще говоря использовать геттеры и сеттеры чисто для изменения одной переменной это долбоебизм. Есть класс, в нем есть методы, которые изменяют его внутреннее состояние. Если программист работает с классом как со структурой, но через геттеры-сеттеры, то смело можно сказать что его архитектура говно.
Я вообще смысл геттеров-сеттеров не понимаю, если честно. Это же лишние сущности в любом раскладе.
А дебил не понимает, что я говорю про вариант без логики?
>Это же лишние сущности в любом раскладе
Как ты сделаешь поле доступным только для чтения, например?
Кстати нихуя. Для интереса решил проверить, накатал простенький пример, включил оптимизацию в дебажном билде, и на выходе получил:
\t\t\tTestDurr.setHurr(123);
007191BB push 7Bh
007191BD lea ecx,[ebp-350h]
007191C3 call durr::setHurr (5700B0h)
>>502957
>Как ты сделаешь поле доступным только для чтения, например?
А зачем мне его делать доступным только для чтения, например?
Ни разу не сталкивался с такой логикой.
Можно реальный пример из жизни? Я не с целью поставить под сомнение или потроллить, мне просто интересна ситуация, в которой может понадобиться применение private и protected. В моей практике таких ситуаций не возникало ни разу.
Ну вот например есть у тебя коллекция, вроде std::map. У нее есть поле size, которое содержит количество элементов. Поле меняется только за счет удаления и добавления элементов и пользователю нельзя давать возможность изменять его напрямую, поэтому оно приватное и для него есть только геттер. Это поле содержит состояние объекта класса, но не должно быть доступно для прямого изменения.
Специально проверил, у меня все инлайнит в релизе. Более того, он у меня еще и конструктор std::string заинлайнил. Советую сменить компилятор, все-таки 2015 на дворе.
>>502962
>А зачем мне его делать доступным только для чтения, например?
Ну если у тебя вся программа из структур с публичными полями, то действительно смысла нет. Пример где это оправдано - это например vector::size. Переменная которая хратит количество элементов вектора недоступна на чтение из клиентского кода.
>public variables = bad programming practice
Половина из них даже сформулировать внятно не может чем именно плохо: "Господин сказал что нельзя, значит нельзя. Но если сделать к ним доступ через геттеры/сеттеры то это отгонит злых духов". Глупые мартышки, что с них взять.
>std::map
Дальше не читал. Не пользуюсь этим говном, и вам не советую.
>>503006
>vector
аналогично
>Советую сменить компилятор, все-таки 2015 на дворе.
Я бы с удовольствием, если честно, но мы вынуждены поддерживать обратную совместимость с WinXP, что ограничивает выбор компиляторов и версии используемых библиотек.
>Не пользуюсь этим говном
Никто тебя и не заставляет. Ты просил примеры, тебе пояснили. Если захочешь еще раз поспорить о вкусах — можешь лучше сразу пойти нахуй.
Мне ничего не пояснили. Я спросил про практическое применение, мне ответили "ну, типа, в говнобиблиотеках нельзя так делать, потому что нельзя". Это ответ, по-вашему?
Блять, я тебе руским по твоей цветовой схеме написал
>поле содержит состояние объекта класса, но не должно быть доступно для прямого изменения.
Если у тебя другие подходы к программированию, то нехуй тут флейм разводить и высказывать свои никому не интересные мнения по поводу качества библиотек.
>ну, типа, в говнобиблиотеках нельзя так делать, потому что нельзя
Тебе все конструктивно пояснили, а ты продолжаешь переписку в стиле
>кококо я вас не понял
>public variables = bad programming practice
Половина из них даже сформулировать внятно не может чем именно плохо: "Господин сказал что нельзя, значит нельзя. Но если сделать к ним доступ через геттеры/сеттеры то это отгонит злых духов". Глупые мартышки, что с них взять.
Вообщем ты прав. Все эти паблики, протектеды и пр. типо защита от тупых кодеров, которые получают готовый класс, но не знают как им пользоваться. Правда это нихуя не работает, но полоумные ООП-шники все равно придумавают правила по которым надо расставлять приваты или проектеды, формулируют ебанутые бэд практики прочую хуйню.
>Так так, шо тут у нас, мне надо поменять координаты вот этого объекта... Такс паблик метод SetCoordinates - нет, это хуйня какая-то... Вот есть же свойства int x, int y! Бинго! Чего, компилятор ругается что они протектед. Щас пабликом их сделаю, быдлокодер тут до меня сидел какой-то, не разбирается нихуя. Воо! Ништяк компильнулось теперь, ну все на продуктвив.
>Ну если у тебя вся программа из структур с публичными полями
Ну сделаю я поля защищенными. И что? Алгоритм станет работать так как нужно? Исчезнет утечка памяти? Производительность вырастет?
>>503044
>Не пользуюсь этим говном, и вам не советую.
>Хотелось бы услышать почему.
Чего непонятного?
>std:: = bad programming practice
Я конструктивно объяснил?
>>Ну если у тебя вся программа из структур с публичными полями
>Ну сделаю я поля защищенными. И что? Алгоритм станет работать так как нужно? Исчезнет утечка памяти? Производительность вырастет?
Если убрать «protected», т.е. видимые дочерним классам, то уменьшиться время на внесение изменений в основной класс из-за кошмара зависимостей в дочерних классах. Курсив загугли и вообще дальше сама.
>видимые дочерним классам
Про френдов забыл?
>то уменьшиться время на внесение изменений
Главное почаще повторять эту мантру
>из-за кошмара зависимостей
Сами придумаем себе проблемы и сами же будем героически их превознемогать. Зато ООП, епта.
>Я конструктивно объяснил?
Ясно все с тобой, хейтерок. Иди зелени в другое место. Не кормите его больше.
> Ну сделаю я поля защищенными. И что? Алгоритм станет работать так как нужно
Только на дваче: дети не знающие ООП и наверняка не учившиеся ни разу в жизни на CS обсуждают ООП.
Поля надо делать защищенными по одной простой причине. Потому что в этом случае доступ к ним контролирует сам объект. Чтобы разобраться кто туда записал не то значение (или поставить проверку, или что-то сделать с этим значением или что-то сделать при его изменении), тебе достаточно поставить проверку в одном-двух местах в классе. А с публичным свойством обращаться к нему может любая из ста тысяч строк в твоем приложении и тебе надо обходить их все и проверять. Это называется инкапсуляция и она нужна для уменьшения сложности огромного по объекму кода, а любое современное приложение огромное по объему.
То есть тут суровые прагматичные причины, желание сэкономить время на разбор/модификацию кода, снизить вероятность ошибок и как итог экономить деньги на разработку.
Условно говоря приватное поле это как подъезд с охраной и пропусками, а публичное это открытый всем желающим.
> Исчезнет утечка памяти? Производительность вырастет?
Будет меньше багов и потраченного времени, проще поддерживать код.
> если у тебя вся программа из структур с публичными полями
то с большой вероятностью это кусок быдлокода так как ООП удобнее и мощнее.
Алсо сишник который не использует std по моему просто дебил который его не может осилить и изобретает свои велосипеды.
[code lang="cpp"]
//x = abse^(iarg)
struct Complex
{
\tdouble abs;
\tdouble arg;
\t
\t//...
};
//Везде в коде, где ты хочешь использовать модуль числа, пишешь в духе:
tvoya_mamka.useAbs (number.abs);
//ВНЕЗАПНО за час до дедлайна оказывается, что большие по модулю числа
//не влезают в твою структуру, и все крашится. Ты вынужден изменить реализацию
//на, например, такую:
//x = real + iimaginary;
struct Complex
{
\tdouble real;
\tdouble imaginary;
\t
\tdouble getAbs ()
\t{
\t\treturn sqrt (real real + imaginary * imaginary);
\t}
};
//Теперь ты по всему коду (а у тебя его миллион строк, не забываем) хуяришь
//замены number.abs на number.getAbs (). Если буквосочетание abs используется
//не только в этой структуре, то тебя ждут увлекательнейшие часы ручного отбора
//нужных мест для замены или написание/поиск хитрожопого скрипта для этого,
//ну ты понел. Дедлайн сорван, господин недоволен глупым рабом, который не любит
//аксессоры. А с их использованием все бы вылилось в изменение одной строчки
//и перекомпиляцию одного исходника:
class Complex
{
\tdouble abs;
\tdouble arg;
\t
public:
\t
\tdouble getAbs ()
\t{
\t\treturn abs;
\t}
};
//"Нужно сразу продумывать архитектуру правильно!" - раздался истошный крик со стороны
//загона для джуниоров. Но тимлид не обратил на эти крики никакого внимания. Ньюфаг
//не человек, и сегодня ему предстоит очень трудная ночь. На протяжение всего проекта
//каждая ночь последнего дня спринта будет у него трудной, и через полгода его интеллект
//будет разработан настолько, что без труда сможет вместить 23 паттерна проектирования.
[/code]
[code lang="cpp"]
//x = abse^(iarg)
struct Complex
{
\tdouble abs;
\tdouble arg;
\t
\t//...
};
//Везде в коде, где ты хочешь использовать модуль числа, пишешь в духе:
tvoya_mamka.useAbs (number.abs);
//ВНЕЗАПНО за час до дедлайна оказывается, что большие по модулю числа
//не влезают в твою структуру, и все крашится. Ты вынужден изменить реализацию
//на, например, такую:
//x = real + iimaginary;
struct Complex
{
\tdouble real;
\tdouble imaginary;
\t
\tdouble getAbs ()
\t{
\t\treturn sqrt (real real + imaginary * imaginary);
\t}
};
//Теперь ты по всему коду (а у тебя его миллион строк, не забываем) хуяришь
//замены number.abs на number.getAbs (). Если буквосочетание abs используется
//не только в этой структуре, то тебя ждут увлекательнейшие часы ручного отбора
//нужных мест для замены или написание/поиск хитрожопого скрипта для этого,
//ну ты понел. Дедлайн сорван, господин недоволен глупым рабом, который не любит
//аксессоры. А с их использованием все бы вылилось в изменение одной строчки
//и перекомпиляцию одного исходника:
class Complex
{
\tdouble abs;
\tdouble arg;
\t
public:
\t
\tdouble getAbs ()
\t{
\t\treturn abs;
\t}
};
//"Нужно сразу продумывать архитектуру правильно!" - раздался истошный крик со стороны
//загона для джуниоров. Но тимлид не обратил на эти крики никакого внимания. Ньюфаг
//не человек, и сегодня ему предстоит очень трудная ночь. На протяжение всего проекта
//каждая ночь последнего дня спринта будет у него трудной, и через полгода его интеллект
//будет разработан настолько, что без труда сможет вместить 23 паттерна проектирования.
[/code]
> защита от тупых кодеров,
То есть понятный самодокументируемый код для тупых кодеров, а умники предпочитают разбираться в лапше из структур и гдобальных функций?
>над божественным pure C
Еще один фанатик, не понимающий что под разные задачи нужны разные инструменты. Иди уже создай pure C тред и сиди там один сколько влезет. Нет, надо сюда приходить и заниматься проповедями "неверным"
>Поля надо делать защищенными
Спасибо кэп, но зачем ты мне это все объясняешь? Да еще буквально цитатами с вики.
>для уменьшения сложности
Придумаем себе сложности и будем героически их превознемогать.
>экономить деньги на разработку.
Нанимая высококвалифицированных гуру-ООП, которые потребуют хорошую зарпалтку? Отличный план.
>Будет меньше багов и потраченного времени, проще поддерживать код.
Опять мантры.
>Алсо сишник который
Алсо %langname% который не использует %libname% по моему просто дебил который его не может осилить и изобретает свои велосипеды.
Я очень надеюсь, что ты пишешь что-то околокриптографическое. Использование собственных велосипедов там петушками потом очень облегчает работу мне.
мимохакор
>>для уменьшения сложности
> Придумаем себе сложности
Ну иди объясни заказчику что ему нужно не полноценное приложение для управления отношениями с клиентами, а консольная программа вычисления чисел Фибоначчи на Го и что он зря придумывает себе сложности.
> Нанимая высококвалифицированных гуру-ООП, которые потребуют хорошую зарпалтку?
Которые в отличие от сишника способны реализовать систему, которая принест прибыль которой с лихвой хватит на оплату труда специалистов.
>Еще один фанатик, не понимающий что под разные задачи нужны разные инструменты.
Это ты ООП-шникам объясняй, которые в абослютно любой задаче пытаются нагородить классы.
>С++ - всего лишь неудачная ООП надстройка над божественным pure C.
Прохладно, если из С++ выкинуть ООП, он все равно чистому С на клык даст
Потому что шаблоны, RAII
Ну на самом деле истина где-то посередине. Не всегда проект является стартапом из молодых-шутливых сениоров. Нанимать в рамках большой корпорации только толковых - экономически невыгодно, обычно их ставят только на критичные участки и как начальников над группками дешевых макак. Долбоебы вроде вопрошающего напишут говно, но от интерфейса, например, большего и не требуется. Старший разработчик ебет их за совсем вопиющие косяки и ставит жесткие рамки, а платить много нужно ему одному, а не всей группе. Другое дело, что макаки - единственные, кто проигрывает от такого расклада, скучно же, и без перспектив и денег. Так что, по идее этот кукаретик должен наоборот искать способ развиваться, а не защищать манямирок, лол.
>Ну иди объясни заказчику
Регулярно общаюсь, и с IT, и с Бизнесом, с Техблоком. Им глубоко похуй.
>способны реализовать систему, которая принест прибыль
Опять мантры
Вообще, я не против ООП и в частности С++. С++ отлично решает ограниченный круг задач, это бесспорно. Но это далеко не панацея. И основые проблемы С++ от того, что его используют для решения задач, для которых он не предназначен.
>иди объясни заказчику что ему нужно не полноценное приложение для управления отношениями с клиентами, а консольная программа вычисления чисел Фибоначчи
>Им глубоко похуй
Здравствуйте, я представитель Otkat Software inc. Мы крайне заинтересованы видеть вас своим сотрудником.
Отказываешься от RAII => отказываешься от исключений практически во всех случаях. Enjoy your
[code lang="cpp"]
switch (makeAction ())
{
case ERROR1: processError1 (); break;
//...
}
[/code]
>искать способ развиваться, а не защищать манямирок, лол.
Мне уже давно все равно какой язык\парадигму использовать. Подбираю под конкретную задачу. Поэтому могу позволить себе сравнение. Ну да, возможно с некоторым субъектевизмом, каюсь, грешен. Не обижайтесь, норм язык, просто не стоит его оголтело использовать.
>>503138
>исключения
Ок.
>лямбды, stl
Сахар и либы. Дело вкуса.
C++ без ООП называется Clay и он дает на клык не только С, но и С++. Жалко, проект умер.
Ну извини, не так выразился. Им похуй на ООП-пробелмы вендора. Главное чтобы функционал работал как нужно.
Это так. Но не выгоднее ли соблюдать небольшое количество правил, чтобы сделать разработку быстрее и проще в разы? Получить те же деньги, затратив меньше усилий.
Отвечу чуть попозжей, если тебе это так критично. Там рефакторинг, использование либ, и самодокументироаный код. Конечно С++ все эти проблемы\задачи решает, ага.
С чего вдруг? У него довольно хуевая лицензия, например, это причина поважнее. А так автор запилил его для себя и пользуется им. А С++ без очень больших бабок не переплюнешь.
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
Чего нет - так это годных курсов.
Наткнулся я тут на гитхабопомойке на мёртвенький аналогичный проект и кое-что меня там заинтересовало - https://github.com/djcsdy/swfmill
А именно: https://github.com/djcsdy/swfmill/blob/master/src/SWFTag.h и его родитель https://github.com/djcsdy/swfmill/blob/master/src/SWFIdItem.h
В базовом классе (Tag) для всех остальных тегов есть статичная ф-я get(...), которая читает айдишник тега из буфера и дёргает другую статичную ф-ю из родителя-фабрики(?).
В итоге, как я понял, её использование сводится к чему-то подобному:
[CODE]
#include "Tag.h"
Reader r = new Reader(buff, buff_s);
Tag t = Tag::get(r);
[/CODE]
Получается дёрнув одну статичную ф-ю родительского класса мы на выходе получим соответсвующего айдишнику потомка. Без всяких отдельных созданий фабрик. Верно?
Но ведь в фабрику надо как-то этих самых потомков с присущими им айдишниками загрузить... И я нихуя не понимаю как это делается...
Да.
Хех, и тут ты такой рассказываешь про способ выучить отдаться английскому языку. Ну или учебник на русском подкинешь. Пожалуйста.
Почитал тут про статичные переменные в классах, которой и является массив у фабрики, и кажется понял.
Получается использование выглядит как-то так?
[CODE]
#include "Tag.h"
#include "Tag1.h"
#include "Tag2.h"
#include "Tag3.h"
#include "Tag4.h"
Tag::Registry[0] = Tag1;
Tag::Registry[1] = Tag2;
Tag::Registry[2] = Tag3;
Tag::Registry[3] = Tag4;
Reader r = new Reader(buff, buff_s);
Tag t = Tag::get(r);
[/CODE]
Запишись на годные платные курсы в своем городе. Обязательно туда, где есть носители языка, потому что если ты ноль вообще, то тебе нужна база для самостоятельного развития. Рано или поздно научишься с гемором, но таки читать и понимать текстовую информацию. Обмазываешься чем угодно, ставишь приложения мобильные, читаешь западные интернеты вместо двощей. Курсера оче заебись заходит с субтитрами - понимаешь 50% слов и заодно слышишь их. Ну и локаль системы, все игры и софт - на английский. Через пару-тройку курсов читать и переводить в голове субтитры станет сложнее, чем интерпретировать подсознательно на слух. Потом и понимание текста подтянется. Через пару лет сможешь читать и даже писать доки на пусть и кривом, но английском. Пруфаю переводом, как я с имеющейся базы в виде адски трудного чтения текста за пару лет выучил английский:
Take a paid course in your city. Choose one with a native speakers. You need a foundation for your self-education. Someday you'll became to understand a text information. Then do anything to help your develop your language knowledge - install English learning apps, read the Reddit instead of the Dvosch. Coursera is very good due to subtitles presence - even if you'll understand a half of the words, you'll get a listening comprehension. Change all your software locales to English. Several courses later, you'll begin to understand speaking without subtitles, but reading skills will also gain. Couple of years later you'll be able to understand and speak English.
Обычно такое делается на препроцессоре.
>Someday you'll became to understand a text information.
Нде. Чувак, ты бы не позорился.
Спасибо за совет. Но есть ещё вопрос, для изучения специализированных текстов, например по математике и физике, как лучше подойти? И может поискать иностранных студентов в ВУЗе, в котором учусь? Они же по идее подойдут для общения?
Да просто читай их и все. Это самое простое, язык там простой и с кучей слов как в русском . Для грамматики только мёрфи прорешать.
> Но есть ещё вопрос, для изучения специализированных текстов, например по математике и физике, как лучше подойти?
Кроме как читать эти самые тексты и искать переводы слов неизвестных, я не знаю.
Ну и ещё можно их в какую-нибудь зубрилку типа анки (рекомендую) забить.
Не вижу позора - ошибки есть, естественно, как и у начинающих программистов есть ошибки в коде. Главное, что я понимаю на слух речь и свободно читаю книги, плюс периодически вычитываю и правлю свои собственные доки и комментарии в исходниках, а также свободно разговариваю с англоязычными коллегами.
Спасибо за совет. Но есть еще вопрос, для изучения специализированных способов ебли, например, анала и орала, как лучше подойти? И может поискать студентов-тянок в ВУЗе, в котором учусь? Они же по идее подойдут для траха?
Вот это точно ненужно. Секс сильно отвлекает от учёбы.
>для изучения специализированных текстов, например по математике и физике, как лучше подойти
Они даже легче понимаются, если термины знакомые.
Тебе тоже необходимо на курсы английского. Для начинающих. Даже гугл транслейт лучше переведет.
#include <list>
#include <string>
#include <iostream>
using namespace std;
int main() {
list< string > stack;
string str;
while (cin >> str) {
if (str == "+" || str == "-" || str == "" || str == "/" ) {
string b = stack.back(); stack.pop_back();
string a = stack.back(); stack.pop_back();
stack.push_back( string("(") + a + str + b + ")");
} else {
stack.push_back( str );
}
}
cout << stack.rbegin();
return 0;
}
Это копия, сохраненная 17 июля 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.