Это копия, сохраненная 25 мая 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Предыдущий: >>456723
в цикле insret(new_vec.end(), vec.begin()+pairs.a, vec.begin()+pairs.b) же
индексы [ i ] сожрались
Вообщем, мне boost::join нужен был, уже сделал.
Хуй там плавал.
Без
\tsetlocale(LC_ALL, "Russian");
\tSetConsoleCP(1251);
\tSetConsoleOutputCP(1251);
не сортирует русские слова (2015, сука, год на дворе). Вместо cin почему-то нужно писать
getline(cin, ...);
кастомный компаратор переписывал раз 10, в итоге откопал где-то:
\t\treturn lexicographical_compare(s1.begin(), s1.end(),
\t\t\ts2.begin(), s2.end(),
\t\t\ticompare_char());
Ну что за говно. Половина функций с &, половина без, хуй проссышь, никакой систематики.
> SetConsoleCP(1251);
> SetConsoleOutputCP(1251);
Виндапроблемы.
> setlocale(LC_ALL, "Russian");
setlocale(LC_ALL, "");
Просто ты тупой спермоклоун.
[code lang="cpp"]
QTextStream in(stdin, QIODevice::ReadOnly);
in.setCodec("<имя_кодека_в_твоей_спермоконсоли>");
QStringList words = in.readAll().split(" ");
qSort(words);
[/code]
Ну или без учета регистра
[code lang="cpp"]
qSort(words.begin(), words.end(), [](const QString &s1, const QString &s2 {
return s1.compare(s2, Qt::CaseInsensitive) < 0;
}));
[/code]
[code lang="cpp"]
qSort(words.begin(), words.end(), [](const QString &s1, const QString &s2) {
return s1.compare(s2, Qt::CaseInsensitive) < 0;
});
[/code]
>он поддерживается
Это не в большинстве библиотек он поддерживается, это просто виндоконсоль калечное создание.
будем считать что так.
напишите лучше пару типикал задач, которые можно распараллелить, хочу std thread немного освоить
Это же массив из указателей на константу типа char, правильно? Почему тогда инициализация сработала? Это ведь два объекта типа string, а не указатели.
Ой :(
А где там написано, что это указатели? Звездочек то нет.
Сложный вопрос. одно и тоже:
char a = "12345" ;
char b = &"12345" ;
А ещё можно:
for (i = 0 ; i != 5 ; ) { printf("%c\n","12345"[i++] ) ; }
> я такой типа нихуя не умею
> но блядь такой типа
> Сам запускай свои клоунские скрипты.
обосрался с дауниты
>Сам запускай свои клоунские скрипты
>А я буду унижаться и жрать разъебанное разметкой говно вместо кода
Сорь)
Блин, как я не подумал о читателях.. Всё иду качать, гойсманки да и там что-то клацнуть надо? Я прост не умею).
Просто блядь оборачивай свой код в тэг [code lang="cpp"][/code]
Больше от тебя ничего не надо, тупица.
>>463026
Потому что синтаксический сахар. Точно так же, как ты можешь передать массив в функцию, принимающую указатель.
[code lang="cpp"]
char a[] = "shitting on your face";
int f(char ) { /banging your mum here*/ }
f(a);
[/code]
То есть по сути происходит взятие адреса первого элемента:
[code lang="cpp"]
const char *c = &"fgsfds"[0];
[/code]
(Обрати внимание на const, без него логично что не дает сконпелировать.)
В моментах когда мой член погружается в разъебанный пердак твоей матери-шлюхи, байтомразь.
Эт точно.
Значит будет другие дырки разрабатывать, коль слабое.
Qt-петух опять подгорел.
ПОЧЕМУ НЕЛЬЗЯ ПОДРУЖИТЬ TEMPLATE КЛАСС С ДРУГИМИ КЛАССАМИ
ПОЧЕМУ ДРУЖБА НЕ НАСЛЕДУЕТСЯ
ПОЧЕМУ НЕЛЬЗЯ СОЗДАТЬ МАССИВ ИЗ TEMPLATE КЛАССОВ БЕЗ ЕБАНИЯ БАЙТОВ
ПОЧЕМУ В ДЖАВЕ ТАКИЕ ПИЗДАТЫЕ ГЕНЕРИКИ А В СИПЛЮСПЛЮС УЁБСКИЕ ТЕМПЛАТЫ КОТОРЫХ Я РОТ ЕБАЛ БЛЯДЬ ПОЧЕМУ НЕЛЬЗЯ СДЕЛАТЬ КАК ГЕНЕРИКИ НУ НАХУЯ ТАКИЕ УБОГИЕ ТЕМПЛАТЫ Я ЕБАЛ БЛЯДЬ КАК У МЕНЯ ГОРИТ ВСЕ ПРОБЛЕМЫ ИЗ-ЗА ЭТИХ ТЕМПЛАТОВ СУКА
Вопрос: Как сделать доступными private поля из какого-нибудь класса для какого-нибудь template-класса? Если делаю friend class ITemplateClass, то есть для интерфейса этого template-класса, из которого он расширяется, то нихуя не работает. Потому что friend на наследуемые классы не работает. Как решить проблему?
> \tsetlocale(LC_ALL, "Russian");
> \tSetConsoleCP(1251);
> \tSetConsoleOutputCP(1251);
Кек, венда до сих пор не может в utf8?
https://msdn.microsoft.com/en-us/library/windows/desktop/dd319072%28v=vs.85%29.aspx
Мимо Windows API-бог
>>463164
Что за ошибка-то?
>Точно так же, как ты можешь передать массив в функцию, принимающую указатель.
Массив - это указатель на первый его элемент.
[code lang="cpp"]
rand()%1 //не генерирует 1
rand()%2 //не генерирует 0
[/code]
Нет. Кури документацию.
Охуенный фреймворк, очень нравится. Совсем по-другому на него посмотрел. Впрочем, это вовсе не значит, что я брошусь писать код на нем. Все, конечно, охуенно, но я нахожусь на стадии обучения и, как следствие, нуждаюсь в разборе задач и самолично реализовывать их. Однако откладывать в долгий ящик не буду - буду допиливать своим йоба приложениям всякие GUI и прочие ништяки.
Но это же костыль. Я хочу чтобы написал один раз - и всё работает для потомков нужного класса.
Алсо, проблему решил. Через указатели. Обращаюсь по ним к приватным членам нужных мне классов.
Красаучег, жи есть!
Но там же какой-то utf16, да ещё что-то куда-то вручную конвертировать надо.
Я предположил, что код наподобие
[code]{
int () *lol;
lol=main();[/code]
скрывает тело функции, и её уже фиг заинлайнишь. Но объясните мне, неужели нельзя инлайнить то, что названо индентификатором? Нафига мне объявлять структуру только для того, чтобы передаваемые функции инлайнились?
Побегу, сломя голову, писать на qt, когда он начнёт использовать неймспейсы и избавиться от moc. А пока неприятно.
> MultiByteToWideChar function
> Maps a character string to a UTF-16 (wide character) string.
Любишь пердолиться с too::many::namespaces::and::even::move, да? Или с шаблонодрисней на 9000 строк вместо нормальной метакомпиляторной рефлексии? Говноедство же.
Нет на оба вопроса. Вариант сделать нормально не рассматривается или у тебя ДЕМАГОГИЯ?
Вот когда сделаешь, тогда и приходи. Посмотрю я, как ты реализуешь рефлексию на крестах без метакомпилятора. Единственная существующая альтернатива кьюту в виде буста использует как раз отвратительные километровые шаблоны и почти такие же длинные нэймспэйсы. А в плане гуёв альтернативы вообще нет. Поделки типа wxWidgets даже рассматривать не вижу смысла.
Умножение матриц, Свёртка, Гистограмма, БПФ
Да, но в конечном итоге ты получаешь строку wchar_t. Перекодировываешь в него из UTF-8 и готово.
Пиздец, высрал хуёвую архитектуру и теперь обвиняет язык, ну не долбоёб?
Не могу уловить сути, у вас в винде stdin и stdout работает на utf8 или utf16? Или о чём вы, упиваетесь тем что есть функция перекодировки?
Ты количество классов видел? Нахуя там нэймспэйсы? Тем более что названия всех классов начинаются с Q, а значит, они не пересекутся с классами из других библиотек. Если же таки пересекутся, то можно задать, чтобы все кьютовые классы помещались в нэймспэйс (вроде при конпеляции задается, а может и простым дефайном, точно не помню, т.к. не пробовал).
Настроения нет. Борду вот писал-писал, а там кроме полутора человек никого и нет. Ну и потом мне диплом писать нужно, а еще я на днях купил геймпад и познал все прелести игры лежа на диване, ну и как последний штрих к картине - завтра выходит жта5 для пеки. В общем не хочу пока что, не все же код дрочить.
Да ладно, я так. Поинтересоваться. Сам ничего не успеваю. Пришел сегодня, хотел запилить мой LaTeX chaining механизм, но вместо этого заснул. Да и в универе завал.
твой-скромный-подпиздчик, который роется в твоих исходниках, аки грязном белье
>Расскажешь поподробнее?
Да я уже писал. Мне надо было сгенерировать LaTeX документ из данных программы. Я дико торопился, поэтому пидор прямо из кода все.
myFile << "\\begin{bmatrix}\n"; .... myFile << "\\end{bmatrix}\n";
Генерировать надо было довольно большой файл, он был абсолютно не читаем, а также я дико заебался его дебажить, ибо все время проебывал какую-нибудь хуйню.
Поэтому я решил написать какой-нибудь класс, который упрощает эту работу. А именно я вспомнил про chaining pattern, который позволяет сделать мне ништяковую вещь.
myTex->begin("bmatrix")->add(myVector);
myTex->write();
Ну и собственно все. Уверен, что есть какая-нибудь готовая обертка, но мне надо осваивать паттерны и все дела.
Ага, понял. Это я просто в глаза долблюсь и прочитал как "LaTeX toolchain", подумал что какая-то новая йоба-технология, лол.
Та не, я ещё тупой. Но это пока что. Иду семимильными шагами, правда шагаю редко.
Ебать ты дремучий. Typesafe, standard c++, без всякого макросоговна с отдельным препроцессором.
http://libsigc.sourceforge.net/
> Ты количество классов видел?
Видел. У неймспейсов появилось ограничение на количество классов или что?
> Нахуя там нэймспэйсы? Тем более что названия всех классов начинаются с Q, а значит, они не пересекутся с классами из других библиотек.
Ну вот и сидели бы в отдельном неймспейсе. И без уебанский Q в начале каждого можно было бы обойтись тогда.
> Если же таки пересекутся, то можно задать, чтобы все кьютовые классы помещались в нэймспэйс (вроде при конпеляции задается, а может и простым дефайном, точно не помню, т.к. не пробовал).
Хули ты сразу не сказал тогда? Лишь срач разводить.
В общем, есть один класс, Wizard. У него есть координаты, X и Y.
set/get методы координат реализованы банально.
void Wizard::set_X(int a)
{
X+=a;
}
int Wizard::get_X()
{
return X;
}
Сейчас проверил - получает/выводит все нормально напрямую. Дело в том, что это у меня менюшка (пытаюсь текстовую игру написать, вот и копаюсь) есть, в которой реализуется "управление" целым отрядом. Т.е. 4-5 "магов".
Код такой.
http://pastebin.com/itfAxYJD
И почему-то на этом моменте cout<<"Координаты: "<<wizard[0].get_X()<<" "<<wizard[0].get_Y()<<endl;
Он мне выдает неебическую хуиту с огромными цифрами. Но при этом движение идет нормально, т.е. изменяются координаты последовательно и как нужно, в зависимости от хода. ВТФ?
Почитай для начала, что такое рефлексия. Это не то же самое что сигналы и слоты.
Сокращай код до уровня небольшой програмки на ideone где повторяется баг, тогда может кто-то и поможет, а скорее всего ты сам разберешся. По тому коду что ты дал вроде все ок.
Хорошо, спасибо анон.
первокурсник, иди нахуй
Прочитай определение сим. разности, осознай что у него есть переопределение через простейшие операции и иди нахуй.
Ты небось из тех, кто постил свои жопы с супом, но так и не смог выпросить, а теперь завидуешь. Угадал?
не) вообще толком не играл ни в одну игру серии
смотрел как братан и однокурсники шпилят в третью и сан-андреас, но че-то не впирало
Я в третью тоже не играл, был тогда школьником, все посоны играли, а я поставил и через 5 минут удалил - показалось, что унылое говно. Относительно недавно начал ходить к другу на большой плазме играть, и как-то начало нравиться. Купил себе телек, пад, предзаказал жта и доволен как слон. Заодно и в другие игры играть стал.
Я вообще первый раз за все время тут присутствия выложил свой код, если что. В следующий раз уже поставлю костыли, не волнуйся.
Вот как, большое спасибо, анон. Извините ньюфага.
Кстати говоря, программа заработала, похоже я просто где-то забыл явно проинициализировать координаты вначале.
Нахуй ты извиняешься? Расставлять теги, работающие только через гомоскрипты - вот пидорство. Не унижайся перед быдлом.
Абу, ты?
А по-моему никакой разницы с префиксом в плане излишности, зато профиты в виде семантики.
Я вам PVS-STUDIO принес, братишки
Cppcheck на постоянный мониторинг файлов. Укажет на многие ошибки по невнимательности.
уноси это платное поделие обратно на хабр
У этого платного поделия триальная версия вечная. Алсо в разы мощнее Cppcheck
Спермоподелие не нужно.
За xcode не знаю.
Я качал плагин для MVS, там оно выделяет отдельную вкладку по вывод результатов анализа как и Cppcheck. В выводе указывается ошибка, файл и строка, где они обнаружены. Кликая по строке вывода ты сразу переходишь к строке с ошибкой. В триальной версии единственное ограничение - 10 таких кликов, можно же просто открывать вручную не кликая.
Не слушай их. Есть триальная версия, пользуйся, тестируй, а дальше пиши на почту
Было бы под линупс, может и купил бы, а так могу только спермой заплатить.
Подчеркну, именно 2D ДПФ, не БПФ. Количество точек по x == количество точек по y, но не равно 2^n.
Первая ссылка в гугле: http://www.fftw.org/
>FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data
ради ДПФ тянуть либу? там же 4 строки кода.
qCompress(data, 9);
Конечно. Вот пример работы.
В няшной не знаю, а для C++ я пользую Qt, там с кодировками все норм
Можешь посмотреть еще на std::wstring
А в чем проблема со считыванием, анончик? Сейчас написал helloworld, который cin'ом считывает в string и потом выводит размер и введенную строку. Ввёл ему abcdабвг - 12 байт, вывел все корректно. Тебе надо количество символов считать что ли?
Т.е. я меняю эту переменную в цикле, а меняются все последние символы этих строк. Это возможно вообще? Как?
> хочу, чтобы в каждой строке последний символ (который идёт до '\0') был привязан по ссылке к переменной char
> реактивное программирование
Проиграл с толстяка.
А что не так? Раз хотит, можно и сделать.
[code lang="cpp"]
std::string s("yoba");
char &last = s[s.length - 1];
for (int i = 0; i < 26; ++i) {
last = char(65 + i);
std::cout << s;
}
[/code]
И какое изначально значение должно быть у этого символа тогда? Может оно изначально везде разное.
Выставь перед циклом её значение, чтобы у всех одинаковое стало. Мне интересно другое: можно такое для трёх строк написать?
Ты хуйню полную городишь. Что значит выставь? А если не выставлю, то что?
В любом случае, для трех строк не получится. Можно нагородить класс-имитатор char и переопределить для него все операторы, чтобы при их вызове обновлялось значение последнего символа в указанных строках. По ссылке не сделать.
[code lang="cpp"]
class Char
{
private:
std::list<std::string > strings;
char c;
public:
explicit Char(char initialValue)
{
c = initialValue;
}
void addString(std::string s)
{
strings.push_back(s);
(s)[s->length() - 1] = c;
}
operator char() const
{
return c;
}
Char &operator =(const char &other)
{
c = other;
for (std::list<std::string >::iterator i = strings->begin(); i != strings->end(); ++i)
(i)[i->length() - 1] = c;
return this;
}
//и другие оператоы
};
[/code]
Ты хуйню полную городишь. Что значит выставь? А если не выставлю, то что?
В любом случае, для трех строк не получится. Можно нагородить класс-имитатор char и переопределить для него все операторы, чтобы при их вызове обновлялось значение последнего символа в указанных строках. По ссылке не сделать.
[code lang="cpp"]
class Char
{
private:
std::list<std::string > strings;
char c;
public:
explicit Char(char initialValue)
{
c = initialValue;
}
void addString(std::string s)
{
strings.push_back(s);
(s)[s->length() - 1] = c;
}
operator char() const
{
return c;
}
Char &operator =(const char &other)
{
c = other;
for (std::list<std::string >::iterator i = strings->begin(); i != strings->end(); ++i)
(i)[i->length() - 1] = c;
return this;
}
//и другие оператоы
};
[/code]
Немного обосрался. Терпеть не могу итераторы, самый бесполезный паттерн.
[code lang="cpp"]
class Char
{
private:
std::list<std::string > strings;
char c;
public:
explicit Char(char initialValue)
{
c = initialValue;
}
void addString(std::string s)
{
strings.push_back(s);
(s)[s->length() - 1] = c;
}
operator char() const
{
return c;
}
Char &operator =(const char &other)
{
c = other;
for (std::list<std::string >::iterator i = strings.begin(); i != strings.end(); ++i)
(i)[(i)->length() - 1] = c;
return this;
}
//и другие оператоы
};
int main()
{
std::string s1("xxx");
std::string s2("yyy");
Char c('z');
c.addString(&s1);
c.addString(&s2);
foreach (int i, bRangeD(0, 10)) {
c = char(65 + i);
std::cout << s1 << " " << s2 << "\n";
}
return 0;
}
[/code]
Немного обосрался. Терпеть не могу итераторы, самый бесполезный паттерн.
[code lang="cpp"]
class Char
{
private:
std::list<std::string > strings;
char c;
public:
explicit Char(char initialValue)
{
c = initialValue;
}
void addString(std::string s)
{
strings.push_back(s);
(s)[s->length() - 1] = c;
}
operator char() const
{
return c;
}
Char &operator =(const char &other)
{
c = other;
for (std::list<std::string >::iterator i = strings.begin(); i != strings.end(); ++i)
(i)[(i)->length() - 1] = c;
return this;
}
//и другие оператоы
};
int main()
{
std::string s1("xxx");
std::string s2("yyy");
Char c('z');
c.addString(&s1);
c.addString(&s2);
foreach (int i, bRangeD(0, 10)) {
c = char(65 + i);
std::cout << s1 << " " << s2 << "\n";
}
return 0;
}
[/code]
[code lang="ocaml"]
let test xs =
let char, set_char = S.create 'A' in
List.iteri (fun i x ->
S.trace (fun c ->
x.[length x - 1] <- c;
Printf.printf "String %d changed: %s\n" i x) char) xs;
for i = 0 to 5 do
set_char (Char.chr @@ Random.int 128)
done
let () = test ["Xynta1"; "Xynta2"; "Azaza"]
[/code]
Учись
Локалхост, еба
Все же знают что этот тред для вопросов нубов к гуру с++
Вот если взять вашу строку string strr {"abcdабвг"}, и например по заданию надо вывести на экран шестой по порядку символ. Как ни хотелось бы, но нельзя написать так: cout<<strr[6];
Мне приходится писать cout<< strr[7]<<strr[8];
Хотя если бы я писал только на латнице проблем не было бы.
фикс : все индексы минус один
>учись
На c++ напишешь - поучусь. А пока что я учусь твоей мамаше в очко засаживать. Неплохо получается, кстати.
Есть две compile-time функции (как это называется правильно?), определяющие является ли тип А базовым для Б
Первая убирает все типовые модификаторы и сравнивает результаты, а вторая ничего не убирает и сравнивает, к примеру, A & с B & и т.д.
Как их назвать?
Алсо, почему еще важен порядок хуевин из std::type_traits?
compile-time быдло
> Чем отличается L"строка" от u"строка"?
Второе в utf-8 вроде как.
> Почему wchar_t 4 байта на линуксе и 2 байта на винде?
Первое — UCS-4, второе — скорее всего рак по имени UTF-16.
Заодно держи вот это: http://utf8everywhere.org/
Как их все-таки лучше разложить в плане архитектуры?
[code]int getche()
{
char ch;
struct termios oldt, newt;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
cout << ch;
return ch;
}[/code]
> Что за структура termios?
Пользовательский тип, может быть что угодно.
> Почему экземпляры созданы как struct
Старый синтаксис от Си, оставлен для совмесимости, скорее всего сипользуется сишная библиотека и в примерах дан сишный синтаксис который и был скопипащен
> Что за tcgetattr
Наверное заполняет структуру
> чем она лучше стандартных функций ввода
Стандартные функции не заполнят пользователский тип данных без перегрузки, а tcgetattr уже есть (если это действительно сишная библиотека)
> тильда
Побитовое отрицание
То есть, ты предлагаешь делать модули меню-модель и привязывать отображение модели к тому, какое меню сейчас используется? Грубо говоря, меню тянет за собой модель?
Я неправильно сформулировал. Расскажу подробнее. Представь себе игорь. В нем есть главное меню, где сверху менюшка с кнопками, а сзади что-то интересное происходит для красоты, и есть непосредственно игровой процесс, где тоже можно вызвать меню нажатием на эскейп. То есть, модель на меню не завязана ничем, кроме соответствия меню модели. При этом меню очевидно является дочерним окном окна-отображения. Но хочется все-таки четко задать связь меню и модели, потому что может понадобиться сделать, например, третью пару для редактора уровней или там окно загрузки сделать отдельной парой. Как-то так.
Плюс, модель все-таки первична, а меню вторично, а так выходит наоборот.
что значит небуфферизированный? смутно представляю о буфферизации вывода (чтобы уменьшить количество прерываний), а с вводом то это зачем?
Нет, для каждого модуля своя.
Это перевод терминала в не каноничный режим, не оч врубую какой смысл без c_cc[VMIN] = 0 ; .c_cc[VTIME] = 0 ; так как с ним получится неблокирующее получение ввода.
И разве не линупсонли?
#include <iostream>
using namespace std;
int main() {
\t
\tchar g = '|_|';
\tcout << g << endl;
\treturn 0;
}
[/code]
Почему вместо |_| у меня выводится на экран только одна палочка - | ?
энтер не надо жать а символ уже прочитан
надо запилить текст с верхним подчеркиванием, проблема в том что в Window xp символ верхнего подчеркивания(U+00AF, U+0305) не отображается или отображается справа от символа (а не над ним)
алсо в функции CreateFont можно создать текст только с нижним подчеркиванием
Напиши говнокостыль, в котором ты будешь рисовать нужный тебе текст, а над ним руками рисовать линию нужной толщины для нужного размера шрифта. Или гугли на codeproject.
Есть три класса:
class A
{
virtual method1()=0;
virtual method2()=0;
}
class B
{
method1() {}
}
class C : public A, public B
{
method2(){}
}
Компилятор говорит, что класс С - абстрактный, так как нет реализации method1. Но ведь я вроде как наследую её из класса B, нет? Как избавиться от этой ошибки?
Ещё один всё понял
А - вроде интерфейс. Б не реализует его целиком, а Ц - реализует, но часть методов наследуется из Б. А - абстрактный класс, Б и Ц - нет.
>Б не реализует его целиком
Анон же тебе написал, В не имеет никакого отношения к А вообще, хоть у них там и имена методов одинаковые - сами методы разные, потому-что один объявлен в А, второй в В.
Так что мне делать то? Переопределить работающие методы в C, просто чтобы A их принял?
Зачем тебе инкрементировать maxmines? С большой вероятностью у тебя бесконечный цикл получится.
В розетку воткнул? Как же вы заебали, необучаемые.
Не понимаю, как мне получить вывод после requestExec(). Помоги, анон, прошу!
Для того чтобы если на клетке уже есть мина программа вышла из if'а и опять повторил итерацию. Я хз что не так с этим языком.
О, это ты зря.
В общем, даже лень тебе что-то объяснять.
Таких, как ты — миллионы, серых и отвратительных, как плевки на асфальте. Приходящих сюда ежедневно с ведром грязной воды, которой мыли полы, бла-бла-бла. Уебывай, короче.
>Qt
Зачем цеплять 50 мегабайт длл-ок для вывода строчки текста, если можно обойтись без них?
кококо, память дишовая
А дальше Hello world никак уйти не получается?
Пиши на ассемблере, хули, раз такой экономный. Исполняемые файлы программы - самая малая ее часть, если это не лаба_3, конечно.
>Исполняемые файлы программы - самая малая ее часть
Большинство программ - это исполняемые файлы и все.
>Пиши на ассемблере, хули, раз такой экономный
Зачем на ассемблере, у меня свой рендер написан на OpenGL, с хинтингом и сабпикселями. 11 килобайт исходников включая шейдеры.
>Что за оболочка такая?
Gnome 3
>А в чем разница, если что одно, что другое качается не больше пары секунд?
100 мегабайт кутишных либ будут качаться далеко не пару секунд, особенно через 2g.
>Gnome 3
А чего он такой хороший? Небось падает постоянно или жрет память, как прокаженный, да?
Ты ответь на вопросы-то, оптимизатор хуев.
>Небось падает постоянно или жрет память, как прокаженный, да?
Это от дров на видео зависит. У меня на интеле очень редко падает, жрет умеренно и не течет.
А сейчас скачай Dependency Walker и посмотри насколько твоя программа "минимальна"
Было 50, теперь уже сто, да? Дальше гигабайт скажешь?
Средненькое приложение на Qt4 без вебкита тянет около 15-20 МБ зависимостей. Алсо,
>2g
Ты бы еще через 56 КБ/с модем сидел.
>А сейчас скачай Dependency Walker и посмотри насколько твоя программа "минимальна"
Я статически все собираю. Под виндой внешние зависимости только -lopengl32 -luser32 -lkernel32 -lglu32 -lgdi32
Около 300 метров.
>Что за просмотрщик?
Это программа лол
>Почему мой nautilus так не умеет?
Может потому, что у меня 3.16?
>Поделись библиотекой
Библиотеки еще нет. Когда оформлю все нормально, выложу скорее всего.
дело в том что мне надо рисовать линию только над одной буквой, остальные же должны быть без подчеркивания а это уже довольно нетривиальная задача, поэтому собственно и спрашивал
А в чем проблема рисовать в два прохода, буквы, потом подчеркивания?
>Даже на 5 кьюте у меня больше 50 с вебкитом не было
Сейчас посмотрел, на 5.0.2 Core + Widgets + Gui + ICU - 57 метров. Вебкит с потрохами - еще 30 метров. Со времен 5.0.2, я думаю, размер только вырос.
>Красивая и наглядная иерархия файлов - это наутилус?
Это в 3.10 или 3.12 вроде добавили. В настройках надо галку поставить "показывать в виде дерева".
>статично ваши гуи не цепляются
Надо за лицензию платить, двести баксов в месяц на разработчика.
Для коммерческих проектов - пока линкуешься динамически. Статическая линковка только для оупенсорса или по лицензии.
Да не слушай ты долбоебов. Статическая линковка возможна, если ты лицензируешь свое поделие под GPL. Продавать тебе его никто при этом не запрещает.
>парсер текстового формата
Любую вменяемую реализацию Regexp? Использовать генератор парсеров? А чем не нравится std::string?
Ну, да. Это решение называется Qt.
Алсо, кто тебе мешает залезть в исходники Петона или того же Qt и реализовать то, что тебе нужно, самостоятельно?
Ума ему не хватит самому реализовать.
Ещё одногруппники списывали задачки. Одна из задачек не работала, а препод её принял. Потупил в этот Ruby-код, который написал недели две назад. Нихуя не понял, блядь. Переписал на C++ и все заработало, да.
Препод дал задание написать простенькую игрулю на Qt&Ruby. Нахуй Ruby - хочу на С++ и что-нибудь годно и интересное, но боюсь обосраться.
Ноутбук уже напоминает, что стал старый. Намекает, что нужно искать работу. А осознание того, что к лету на работу вряд ли получится устроиться в качестве программиста, делает меня ещё грустить.
До сих пор не нашел внятной и подробной реализации Chaining Methods. Такое ощущение, что везде какие-то абстрактные примеры, хмык.
Ну у нас ребята крайне неопытные в программировании учатся на потоке, поэтому он решил пояснять за основы на Ruby, за что я ему благодарен, ибо действительно оценил этот язык.
Потом он решил нам пояснить за GUI. Почему от tk он отказался, я так и не понял. Взял Qt и Ruby, а я вообще удивлен, как это говно вообще работает. Впрочем, он вроде бы C++ погроммист, поэтому игрулю буду ему на C++ писать. К тому же у меня не вышло подружить Qt и Ruby.
Блять, а как ты их подружить то собирался? Для чего и каким образом их смешивать в одном приложении?
Ну там есть ruby-qt4 библиотека. Подключаешь и работаешь. Конечно, я проигрывал, когда сигнал и слот передавался просто, как название метода в кавычках, но все равно прикольно было.
Так бы и сказал, что binding кьюта для руби. Хз что там можно не осилить, оно же в одну команду ставится из рубишных репозиториев.
А у меня не встала. Ошибок целый вагон. Одну пофикшу @ 10 выпадает. А этим говном мало кто пользуется, как я понимаю, и решения висят на всяких мелкофорумах с обсуждением на 50 страниц, блядь.
Есть такое. Может быть, на выходных разберусь в чем проблема, но мне-то лучше практиковать C++, верно?
Ты меня спрашиваешь? Что больше нравится, то и практикуй. Все эти срачи о том что язык1 лучше язык2 разводят тупые школьники.
Не, не спрашиваю. Просто проебался с концовкой предложения.
Спасибо большое! В пдфе её можно достать? Я просто не в России живу.
Уже нашел, спасибо друзья.
std::string + std::regex
Не понимаю чё за хуйня, когда пользуюсь fork программа не завершается на контрл+с. Я как-то не правильно завершаю детей? Дико бесит, я не могу так отлаживать.
А всё ясно, чёт я тупканул, у меня родитель ходил в код детя и там умерал.
А почему вообще такие базовые вещи приходится реализовывать самостоятельно?
По-моему это говорит о том, что C++ говно.
По-моему ты тупой хуесос, не умеющий смотреть дальше своего носа. Большинство проблем с добавлением современных фич :из-за подержания совместимости.
Посмотри чуть дальше stl. Там все давно уже есть. Хотя парсер можно и средствами stl реализовать быстро.
Более мене ВСЁ появилось в стандарте С++11. Например, в классе std::string нет реализации функции Format() со списком параметров типа sprintf(). Эту костылину нужно писать самому или делать вид что тебе это и не нужно вовсе.
Не совсем так, но ты на верном пути.
constexpr вычисляется на этапе компиляции.
Не мы в комитете сидим. Там дяденьки в возрасте, со своими тараканами, и не всегда они могут угнаться за каждым новомодным говнецом (да и не за всеми полезными штуками, увы). Хотя бы совместимость поддерживают и вводят при этом новые и новые фичи, уже очень хорошо. Но чуть больше гибкости им бы не помешало, согласен.
Уж всяко лучше поехавших школо-революционеров.
http://www.fayloobmennik.net/4810014
Задача: многопоточная факторизация входящего потока чисел.
У меня твой файлообменник не работает. Рекомендую использовать всякие pastebin или ideone.
подскажите пожалуйста решение, дан массив структур, содержащий имя и фамилию студента,
курс, группу и место проживания(дом, общежитие, съёмное жильё). Как получить списки студентов в алфавитном порядке по курсам, проживающих в общежитии?
Я продолжаю тебя не понимать. Абстракция соблюдена, инкапсуляция тоже. Может быть, попробуешь романов привести?
[code lang="scala"]
students.filter(_.mestoProzhivania == "obschezhitie").groupBy(_.kurs).mapValues(_.sortBy(_.name))
[/code]
Я тебе сказал, что по сути у тебя процедурная портянка буквоговна.
Попробуй хотя бы переделать это в более функциональный вид, без говнопеременных, говнобуфферов и говноциклов.
Не вижу ничего по сути. Ты сейчас бросаешься терминами, а я бы хотел услышать конкретный ответ. Например, мог бы рассказать, что именно там сделано не по ООП и как сделать в нем.
Ок, сделай нормальный интефейс с функцией [code lang="cpp"]LCM getPrimesOf(const uint64_t number);[/code]
, и уже к нему реализацию, вместо говна размазанного по 10 файлам.
Спасибо! Вот это уже полезно, и я тебя почти понял. Но как ты предлагаешь это делать многопоточно без буфера?
А что с файлами не так? Ты думаешь, делать обертки для потоков это плохая идея?
Я не знаю цпп, но вот нагуглил специально для тебя:
http://en.cppreference.com/w/cpp/thread/future
http://en.cppreference.com/w/cpp/thread/promise
Сделай как-то так [code lang="cpp"]std::future<LCM> getPrimesOf(const uint64_t number);[/code], и там оборачивай вычисления в future
— раздался пронзительный голос со стороны параши.
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
Луркоеб, плис.
>"Паттерны проектирования" - Э. Фримен, Э. Фримен, К. Сьерра, Б. Бейтс
>Книга будет интересна широкому кругу веб-разработчиков
Или похуй?
Это становится очевидно, с опытом.
Вот часто вижу
\tag[shit]{shit}
или
\tag{shit}
А в чем разница между квадратными и фигурными скобками?
Ну так без смазки же. С паттернами приятней.
В квадратных скобках необязательные аргументы. http://stackoverflow.com/questions/1812214/latex-optional-arguments
И правильно ли я вообще сделал эту хуйню?
Создать класс Goods (товар). В классе должны быть представлены поля: наименование товара, дата оформления, цена товара, количество единиц товара, номер накладной, по которой товар поступил на
склад. Реализовать методы изменения цены товара, изменения количества
товара (увеличения и уменьшения), вычисления стоимости товара. Должен
быть метод для отображения стоимости товара в виде строки.
http://pastebin.com/7QetZ8Kh
Паттерны придуманы для того, чтобы кодомакаку можно было за вменяемые сроки научить писать код, понятный остальным кодомакакам в команде. Более-менее смышленый человек интуитивно использует нужные паттерны, даже не зная о том, что это паттерны. В любом случае, начинающему их учить смысла нет, один вред будет. Когда уже кое-что можешь и понимаешь, тогда полезно посмотреть, как другие решают типовые (и не очень) задачи, а до этого - не стоит. Яркий пример, почему не стоит - долбоебы, знающие jQuery, но не знающие JavaScript.
>Аноны, что значит "метод для отображения стоимости товара в виде строки"?
Это значит старый долбоеб вместо препода. Поссы ему в рот и проблема решится сама собой.
Не, препод нормальный, просто методичка эта с заданиями не первый год уже используется.
Можно просто забивать на это тогда?
>методичка эта с заданиями не первый год уже используется
>препод нормальный
Нет, не нормальный.
ну не траль, плиз помоги
Ну сделай из этого хуйню вроде
[code lang="cpp"]std::vector<Student> students = { ... };
std::vector<Student> inObschezhitie(students.size());
std::copy_if (students.begin(), students.end(), students.begin(), [](Student s){return s.mestoZhitelstva == "obschezhitie";});[/code]
И т.д.
>Так что мешает сделать так же?
История с xml в скале, например. Чем меньше стандарт, тем проще его поддерживать.
ну няш)), помоги пожалуйста, подскажи решение без векторов и без sortBy
объясни пожалуйста решение с векторами
[code lang="cpp"]std::vector<Student> students = { ... };
std::vector<Student> inObschezhitie(students.size());
std::copy_if (students.begin(), students.end(), students.begin(), [](Student s){return s.mestoZhitelstva == "obschezhitie";});[/code]
воот что эти строки обозначают, я не понимаю
Ну код значит берёт первый массив, и копирует во второй тех студентов, которые в общежитие.
Ты охуел? Ты тут каждую лабу выпрашивать будешь, мразь?
Вот тебе няшная сишная сортировка, но ты ведь всё равно не разберёшься, да? И свою написать ты тоже не сможешь.
http://www.cplusplus.com/reference/cstdlib/qsort/?kw=qsort
Хочу опуститься чуть ниже, чем готовая обертка для запросов, но вопрос "насколько низко?".
Запросы к серверу отправляются по https. Вот пример запроса:
https://oauth.vk.com/authorize?
client_id=APP_ID&
scope=PERMISSIONS&
redirect_uri=REDIRECT_URI&
display=DISPLAY&
v=API_VERSION&
response_type=token
Возвращает JSON объект. Насколько низко можно опуститься, чтобы получить как можно больше знаний, которые можно ебашить на работе, и не сильно выебать себя в жопу?
inb4:пизда твоей мамаши))) скриптоговно не нужно)))
Ну у меня короч пост-билд копирует сбилженый бинарник в папку плагинов, а пре-билд эту папку удаляет.
> Пока лень переписывать ту считалку линейных уравнений. Подумываю заебашить свой клиент для vk.
Это которую?
С каких пор оно возвращает в JSON? Вроде всегда редирректило на REDIRRECT_URL с токеном в ссылке.
Константа - это пометочка для компилятора, чтобы он не разрешал изменять значение данной переменной с момента её инициализации. Значение может быть не известно на этапе компиляции.
Константное выражение - константа, значение которой известно на этапе компиляции. Нужна для удобства (избегаешь ошибок с "магическими" числами, для её изменения достаточно исправить определение, а не во всех местах, где она).
Ты охуел, что ли? Что может
быть проще, чем вектора?
>>466477
Первой строкой он создал вектор типа <Student> (вероятно, Struct из стринга, говна и мочи) через равно и инициализацию фигурными скобками. Равно я бы убрал, чтобы получить строгую C++11 инициализацию, это добавляет понимания, что происходит.
Второй строкой он создал вектор типа <Student> размера того же, что и первый вектор.
Третьей строкой он запилил функцию, которая видимо обёрнута классом, в которой есть первый вектор, и видимо второй тоже, т.к. это виидмо опечатка:
>students.begin(), students.end(), students.begin()
> Третьей строкой он запилил функцию, которая видимо обёрнута классом, в которой есть первый вектор, и видимо второй тоже, т.к. это виидмо опечатка:
Да и вообще там надо что-то типа std::back_inserter
Покажи по хардкору, как в него безопасно покласть указатели на выделенную память, а затем ещё безопаснее освободить.
От ООП меня тошнит. При этом не обязательно его использовать, достаточно, чтобы оно просто было рядом.
Как то подозрительно ты меня на друге ЯП сподвигнуть пытаешься. Я лучше на FASMе сборщик напишу, чем буду учить ещё это.
> Я лучше ведро говна сожру, чем возьму подходящий инструмент, как нормальный вменяемый человек.
А нахер тебе вообще сборщик мусора? Какой дегенерат его вообще придумал? Вот представь, тебе пришла идея в голову:
А ДАВАЙ Я НЕ БУДУ ВЫТИРАТЬ ЖОПУ И ВООБЩЕ БУДУ СРАТЬ ПРЯМО В ШТАНЫ, ЧТОБЫ ГОВНО ВАЛИЛОСЬ ПО ЛЯЖКАМ И ВЫПАДАЛО ИЗ ШТАНИН! А ПОТОМ, КОГДА ШТАНЫ НАЧНУТ РВАТЬСЯ ОТ ГОВНА, РАСПИРАЮЩЕГО ИХ, Я ПОЗОВУ СПЕЦИАЛЬНОГО ЧЕЛОВЕКА, КОТОРЫЙ ВСЁ ЭТО ГОВНО ВЫЧИСТИТ! И ДАЛЬШЕ БУДУ СРАТЬ В ШТАНЫ! ГЛАВНОЕ - ЧТОБЫ НЕ ХОДИТЬ ДО СОРТИРА И НЕ ВЫТИРАТЬ ЖОПУ, ЭТО ЖЕ ТАК ДОЛГО И НЕУДОБНО!
Гениально звучит, не так ли?
> мои поделки нельзя делать надувным молоточком
Ну расскажи нам про задачу, которую ты хочешь решить на сишечке со сборщиком мусора.
Так RAII это же полная противоположность.
СРЁШЬ ТОЛЬКО НА УНИТАЗЕ, БОЛЬШЕ НИГДЕ! КОГДА ПОСРАЛ - ТУТ ЖЕ ВЫТЕР ЖОПУ НАЧИСТО И ПОШЁЛ ДАЛЬШЕ, КАК БЕЛЫЙ ЧЕЛОВЕК.
Статистический анализатор, хочу чтобы использовал векторы, по нескольку штук, с заранее неизвестными размерами, для этого нужна простая СУБД, а сборщик мусора нужен чтобы за ней подтирать автоматом.
Молчи, ты не интересен.
Ты сам понимаешь, что несешь? Или просто перечисляешь известные тебе баззворды в одном предложении?
Ммм всё ясно, шизофреник.
Как баба, ей богу.
> это не повод учить другие ЯП
> Необходимость срубить дерево для меня не повод учиться пользоваться топором, вместо молотка.
Нафаня-долбоёб, а ты чо такой проницательный, что аж запутался?
Всё верно написано.
Аллокатор != сборщик мусора
Я короче посетил семинар КРОКа. Заебался. Завтра отпишусь бугуртной пастой, лол.
Garbage collector жи. Другой вопрос - а нахуя? Основное преимущество сишки - скорость. С гц она его лишится.
Суть - пишем в брошзере на QML, ~300 КБ жабаскрипта и вперед, никаких плагинов не требуется. HTML и CSS отправляются туда, где им и место - на помойку... сказал бы я, но, увы, проект еще довольно сырой и далеко не все фичи QML поддерживает.
Не писать на HTML-параше и CSS-дрисне. Только QML и жабаскрипт (тоже не ахти, но из всех сортов говна самый вкусный).
Посему я сегодня озадачен вопросом, а найду ли я РАБОТУ C++ пограммистом, ведь на нем хуй да нихуя пишут.
Олсо нудили про то, что нет специалистов, демографический кризис, пришлось идти в регионы. В конце семинара кун задавал вопрос, а хули ему уже второй раз даже в собеседовании отказывают?
Олсо, поясните за объекты.
Вот ты пишешь в {Class object;}, что создаешь какой-то объект. Программа выходит из скоупа и разрушает объект автоматически. А теперь когда тоже самое делаешь через new. Ведь в таком случае память надо подчищать самому - писать деструктор, вызывать его и т.д. А когда собственно использовать это ручное выделение\высвобождение памяти?
>А когда собственно использовать это ручное выделение\высвобождение памяти?
Когда объект должен жить после выхода из скоупа/когда объект слишком большой, чтобы размещать его на стеке. Для управления памяти есть умные указатели.
> найду ли я РАБОТУ C++ пограммистом
Постараешься – найдёшь.
> нет специалистов, демографический кризис
Каких они там спецов то ищут, лол? Которые стандарт цитируют, как библию?
> А когда собственно использовать это ручное выделение\высвобождение памяти?
Нихуя не понял вопроса. Сейчас память ручками стараются не выделять, вроде бы. Но внутри различных инструментов автоматического управления памятью один хуй это используется.
Знанием одного языка тут особо не прокормишься. А вообще чистому сишнику прямая дорога в системное программирование или в микроконтроллеры всякие.
Есть шанс куда-то устроиться и научиться всему на месте, или нужны специальные знания?
> куда-то устроиться и научиться всему на месте
Такое бывает, но редко, чаще у студентов. Попробуй найти стажировку.
База нужна в любом случае.
А где стажировку искать? Я вообще на всяких сайтах с поиском работы, типа хх искал и ничего не нашёл. Есть специальные какие-то сайты?
А вот тут хуй пойми, сам в последнее время планирую съябывать из "науки" в продакшн.
Стандартный список сайтов с вакансиями:
Яндекс, job.ru, career.ru
А ты еще больше ifов добавь, вдруг поможет?
на самом деле добавь по пустой строке/столбцу с каждой стороны и считай как белый человек, с единицы, проверяя у каждой клетки 8 соседей. И еще: не пользуйся endlом, он каждый раз принудительно очищает буфер. Скорее всего, тебе нужен простой '/n'.
Спасибо.
Такая же параша, как и хтмл, только угловые скобки убраны. Вся уебищность верстки остается.
И чем же оно лучше?
Я-то знаю, что такое copy_if, но он вместо использования вектора для отфильтрованных элементов использует исходный вектор. При этом за каким-то хуем под отфильтрованные элементы выделяется памяти как под исходные.
>Я-то знаю, что такое copy_if, но он вместо использования вектора для отфильтрованных элементов использует исходный вектор
Вот так надо, наверно
std::copy_if (students.begin(), students.end(), inObschezhitie.begin(), [](Student s){return s.mestoZhitelstva == "obschezhitie";});
>При этом за каким-то хуем под отфильтрованные элементы выделяется памяти как под исходные.
А как ты узнаешь, сколько надо выделять?
> Так RAII это же полная противоположность.
Зачем? Каждый new это поиск в куче, а выделение памяти в управляемой куче идёт также быстро, как и на стеке. Это охуенное преимущество: можно тратить время на управление памятью, когда это удобно, а в моменты загрузки системы на это время не тратить. Плюс нет фрагментации, можно динамически загружать-выгружать объекты и переносить между серверами.
Я бы с огромным удовольствием писал на шарпе, вытаскивая в неуправляемую область только высокопроизводительный код, что на системах с общей памятью я и делаю
> Вот так надо, наверно
Ну я бы ещё константные итераторы брал, а не простые, потом количество студентов бы посчитал, хотя это ладно.
> А как ты узнаешь, сколько надо выделять?
А это std::vector автоматически делает, для этого push_back там и придумали. А чтобы с std::copy_if использовать придумали std::back_inserter...
>А это std::vector автоматически делает
Т.е. перевыделяет память по десять раз, вместо заранее выделенного места
Я ведь ему конкретно указал что надо проставить 10 мин и только потом выйти из цикла!
А ты не думал что "field[rand() % maxX + 1][rand() % maxY + 1] = '*';" может проставить мину по нескольку раз в одно поле?
Короче вроде понял почему такое гавно.
Да, но вот больше десяти раз он память вряд ли выделит: у тебя нет столько данных.
И как быть теперь? Я с этим говном уже день пятый наверное ебусь, то одно вылезет, то другое.
1) http://www.cplusplus.com/reference/random/?kw=random
2)
[CODE]int need_to_place = 99;
while (need_to_place > 0) {
int x = ...;
int y = ...;
if (have_mine(x,y)) continue;
place_mine(x,y);
--need_to_place;
}[/CODE]
Обрати внимание, у тебя генерируется четыре случайных числа на две координаты.
Потому что пердолики.
>потому что с++ сосет по скорости у чистого с
Да, разница в целых 1.0000000000001 раз
>И да, не всем нужны классы и ООП
Не всем нужна квартира и горячая вода, в пещере норм будет.
Всегда ли двоичное представление положительных чисел для знаковых и беззнаковых типов совпадает? Или возможно "implementation defined"?
> двоичное представление положительных чисел для знаковых и беззнаковых типов совпадает
Не совпадает. Не в стандарте дело даже, а в бите для представления знака числа.
Хорошо. Напиши мне представление числа от 0 до 127 (возьми любое, например 4) для типов:
int8_t
uint8_t
Ну выбирай задачу, ты пишешь на си, я пишу на плюсах, и посмотрим, кто у кого сосёт. Я только гандон надену, а то запархатится от сишкамрази можно
Стандарт не регламентирует расположение бита знака и вообще реализацию арифметики вычислителем. Может быть у меня математик-маразматик в качестве вычислителя, который значения записывает на тетрадном листочке, и у него sizeof(char) это четыре клеточки. И он в первой клеточке у signed char ставит плюсик, а у unsigned char никогда плюсика не ставит.
Ну вообще это не самое безосновательное предположение, плюс ты можешь в иницализации накатать тест с reinterpret_cast и если это предположение не выполняется просить обратиться в поддержку. С вероятностью 99.999% тест будет положительным всегда
Без хуя гандон не нужен.
Никак. Это прямое указание компилятору "там лежит huita, иниибет". Просто по другому адресовать будет
> Как влияет на быстродействие?
Никак. Эта штука действует только на компиляторе. Собственно, с помощью неё ты бы потом и будешь интерпретировать знаковые, как беззнаковые.
#include <stdio.h>
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
#include "userfool.h"
void trash = NULL;
DLL_EXPORT void TrashCleaner(void){
\tif(trash != NULL) do free(trash); while(++trash != NULL);
}
DLL_EXPORT void save_malloc(int __size){
\tif(trash == NULL){
\t\ttrash = malloc(sizeof(void) 2);
\t\tif(trash != NULL){
\t\t\ttrash[0] = malloc(__size);
\t\t\tif(trash[0] == NULL){
\t\t\t\tfree(trash);
\t\t\t\treturn NULL;
\t\t\t}
\t\t\telse{
\t\t\t\ttrash[1] = NULL;
\t\t\t\treturn trash[0];
\t\t\t}
\t\t}
\t}
\telse{
\t\tint i;
\t\tfor(i = 0; trash != NULL; i++);
\t\ttrash = realloc(trash, sizeof(void) i + sizeof(void));
\t\tif(trash != NULL){
\t\t\ttrash[sizeof(void) i + sizeof(void)] = NULL;
\t\t\ttrash[sizeof(void) i] = malloc(__size);
\t\t\tif(trash[sizeof(void) i] != NULL)
\t\t\t\treturn trash[sizeof(void) * i];
\t\t}
\t}
\t
\treturn NULL;
}
#include <stdio.h>
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
#include "userfool.h"
void trash = NULL;
DLL_EXPORT void TrashCleaner(void){
\tif(trash != NULL) do free(trash); while(++trash != NULL);
}
DLL_EXPORT void save_malloc(int __size){
\tif(trash == NULL){
\t\ttrash = malloc(sizeof(void) 2);
\t\tif(trash != NULL){
\t\t\ttrash[0] = malloc(__size);
\t\t\tif(trash[0] == NULL){
\t\t\t\tfree(trash);
\t\t\t\treturn NULL;
\t\t\t}
\t\t\telse{
\t\t\t\ttrash[1] = NULL;
\t\t\t\treturn trash[0];
\t\t\t}
\t\t}
\t}
\telse{
\t\tint i;
\t\tfor(i = 0; trash != NULL; i++);
\t\ttrash = realloc(trash, sizeof(void) i + sizeof(void));
\t\tif(trash != NULL){
\t\t\ttrash[sizeof(void) i + sizeof(void)] = NULL;
\t\t\ttrash[sizeof(void) i] = malloc(__size);
\t\t\tif(trash[sizeof(void) i] != NULL)
\t\t\t\treturn trash[sizeof(void) * i];
\t\t}
\t}
\t
\treturn NULL;
}
Ну и нахуй ты это говно без тегов сюда притащил? Выглядит уёбищно, потокобезопасности никакой.
mamashka[chto_to ? пара умножений : 0]
или
mamashka[пара умножений]
мимо-быдло-никогда-так-не-делающий
Там что-то вроде a * b + n
А мерять не хочу, потому что
>ULTRA PIDORASIQUE OPTIMIZATION BYUIDLO
Ну надо же, да я как то не подумал, что тут жюри, меня оценивать будет.
Если асм сюда прикинуть, то получится вроде таких наборов инструкций
1.1:cmp,jmp,mov,mul,add
1.2:cmp,mov
2:mov,mul,add
Что я пытался изобразить, это что для 1 случая при вычислении пары умножений выполняется больше инструкций, но если вычислять не надо - меньше, а для второго, что он при вычислении пары умножений будет быстрее, но не будет экономить время на бессмысленных подсчётах.
Так что, если ты калькулировать будешь много, а отсеивать мало, то второй вариант должен выполняться быстрее первого.
Хорошо тебе, в простом мире живёшь. И поток только один у тебя бывает. И телепатами с детства окружён. И вообще, как бог - всё правильно думаешь, без тени сомнения.
Надо замерять. Второе на классическом хуй86 из-за OoOE и конвейера может быть и быстрее на кропаль, а может и нет.
>>467849
Может конвейер заступориться из-за перехода, я бы ставил на второй вариант даже с отсеиванием.
>>467891
Путаешь static_cast и reinterpret_cast. Второй компилируется ни во что абсолютно, и время никуда не тратится (кроме компиляции).
bump
Нет. В общем случае, reinterpret_cast, но надо понимать что делаешь. static_cast позволит только указатели на простые типы, dynamic_cast вообще не даст.
Это классический producer consumers паттерн. Тысячи статей по это. Ещё называется "как накормить философов"
Ясно, спасибо.
Кастовать можно, использовать - нет, все зависит от ситуации.
До числа 2147483647 представление будет идентичным. Потом int пойдет в минус, станет -2147483648. А unsigned int пойдет дальше по положительным числам.
Подскажи, анон, какую реализацию стоит взять при высокой нагрузке, чтобы было потокобезопасно? С википузии (http://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem) мне больше всего нравится вариант с монитором, но там пугают race condition, чего не хочется.
> Чёткой границы нет, 8х8 или 16х16 – небольшие. Чтобы в стек влезало.
Чем подкреплено это ебаное утверждение? Чем обоссанные статические массивы лучше для хранения матриц? Почему матрица 17x16 "не влезает" в стек? И зачем её туда запихивать?
Или вот скажем местная реализация (https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/) -- она полностью адекватна проблеме, или есть какие-то подводные камни, которых я не вижу?
Кто сказал, что sizeof(int) == 4? Кто сказал, что именно таким образом реализован бит знака? Если в твоей путяге рассказали про прямой и обратный код, это ещё не значит, что других способов представления нет. Эксперты, блядь.
> есть какие-то подводные камни, которых я не вижу?
Навскидку: не раздавай числа по одному. Замерь время и сравни с теоретической производительностью, возможно. придётся брать другой вариант. Если количество чисел заранее известно, можно отказаться от синхронизации и выделить область памяти для каждого потока, например. Нужно больше знать про задачу.
Задача проста, но злоебуча. Из стандартного ввода поступают числа (например, пусть будет uint16_t). Они кладутся в очередь. При добавлении числа просыпается один из рабочих потоков (число которых жестко задано) и начинает делать с ним какую-то магию, не суть важно, но она может быть довольно длительной. Соответственно, завершив дело он засыпает. Когда числа перестают поступать потоки разбирают, что осталось, и выходят.
В принципе, если подумать, очередь вполне может ждать, пока один из потоков доработает, потому что иначе она может раздуться до диких размеров при большом количестве чисел (а значит, ее по-любому придется ограничивать).
Т.е. она ещё и в динамике работает? Может час числа не быть, потом придти одно, потом завтра миллион?
Нет, никакой динамики. Просто входящий поток. Но обсчет одного числа может идти довольно долго.
Алсо, возникает такой концептуальный вопрос: как на голом С++, без Qt и его сигнальной системы, составить грамотный алгоритм, который будет заполнять очередь, если она не полна, и выдавать задания любому потоку, как только он освободится, если есть свободные задания.
Я пока нашел такую схему:
while ( !pushNumber )
{
while ( !popNumber ) {}
}
где обе функции возвращают true, если удалось выполнить их назначение, иначе false. Но не могу оценить с ходу, насколько оно адекватно.
UPD: это вызывается при каждом новом прочитанном из потока числе. Собственно, поэтому возникают сомнения в отсутствии провисаний.
А как будет выглядеть с ним контроль за числом потоков, например?
Вообще, было бы интересно посмотреть, как будут запускаться потоки и как с них будет сливаться инфа?
Мне лень читать прямо сейчас, чтобы разобраться, как оно работает в плюсах и тем более лень разъяснять тебе фундаментальные основы хрени. Попробуй погуглить, это действительно интересно, весьма не сложно, понравится твоему преподу.
Все что в скобках - скоуп. Во-первых, переменные, объявленные внутри скоупа, перестают быть видны вне его, то есть за скобками. Во-вторых, переменные, объявленные в скоупе на стеке, удаляются при выходе из него.
>>468557
Ясно. Не хотим использовать готовое, хотим велосипед, который будет в точности повторять то, что уже умные люди написали давно. Буст хоть возьми, долбоебушка.
>>468559
А тебе бы на хуй пройти надо, клован.
Слюшай, дарагой, я бы с радостью все это сделал на Кьюте за два часа, но я пилю тестовое на работку, так что там УСЛОВИЯ.
> Не хотим использовать готовое
Если это готовое — Qt, то не хотеть использовать эту парашу нормально.
И тут ты такой с примерами платформ и рантаймов с другим размером инта и другой реализацией отрицательных чисел.
Заебали такие эксперты.
>И тут ты такой с примерами платформ ... с другим размером инта
А вот и родившиеся в новом миллениуме начинают вкатываться.
Сделать тоже что сделано в QT - коллбек.
А ЕСЛИ ТЫ НЕ МОЖЕШЬ КОНТРОЛИРОВАТЬ СВОЮ ЖОПУ, МММ, УЁБА?! КАК ТЫ ТОГДА ЕЁ ВЫТИРАТЬ СОБРАЛСЯ?!
Спамим своими лабами в новом тренделе: https://2ch.hk/pr/res/468625.html
Спамим своими лабами в новом тренделе: https://2ch.hk/pr/res/468625.html
Спамим своими лабами в новом тренделе: https://2ch.hk/pr/res/468625.html
Спамим своими лабами в новом тренделе: https://2ch.hk/pr/res/468625.html
Спамим своими лабами в новом тренделе: https://2ch.hk/pr/res/468625.html
Примеры давай, а не выебывайся, старпер. PDP 11 уже никого не интересует
>и рантаймов с другим размером инта
Я что-то путаю, или по сишному стандарту инт 16 бит? Да вообще вопрос не в этом, а знаковом бите и т.д.
Я так понял, представление от нуля до макс_инт не обязано совпадать с ансигнед.
В инте 32 бита. Старший из них делит диапазон значений инта пополам, так как занят под знак. Только по тому, что этот бит занят, использовать диапазон значений больший, чем позволяют 31 бит невозможно. 2 ^ 31 = 2147483648
По стандарту си похую сколько бит в инте так же как похую ему сколько бит в байте, он гарантирует правильность обращения с битами, а не их количество, которое задаётся архитектурой.
>В инте 32 бита.
Объебос, в инте столько бит, сколько необходимо для хранения чисел от -32767 до 32767. То есть минимум 16, а все остальное - платформозависемо. Гугли всякие ILP32.
Похуй.
Это копия, сохраненная 25 мая 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.