-
+999
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
#include <iostream>
#include <algorithm>
#include <stdlib.h>
const size_t MB = 1024*1024;
size_t MOD = 0;
unsigned char uniqueNumber () {
static unsigned char number = 0;
return ++number % MOD;
}
int main(int argc, char** argv) {
if (argc < 3) {
return 1;
}
size_t BLOCK_SIZE = atoi(argv[1]) * MB;
MOD = atoi(argv[2]);
unsigned char* garbage = (unsigned char *) malloc(BLOCK_SIZE);
std::generate_n(garbage, BLOCK_SIZE, uniqueNumber);
std::sort(garbage, garbage + BLOCK_SIZE);
free(garbage);
return 0;
}
http://habrahabr.ru/blogs/cpp/138132/
It makes me cry. Понятно, что это всего лишь демонстрационный пример. Но все таки это не оправдание. Итак, начнем по порядку с самого худшего:
1. Сишные malloc/free вперемешку с STL-алгоритмами. WTF? Зачем?
2. Глобальная переменная? Автор не осилил хотя бы bind? Который, к тому же, уже давно std::bind.
3. Uppercase для локальной переменной.
4. Отступ в джва пробела.
invi,
15 Февраля 2012
-
+997
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
void TexQ::Move()
{
mx = quad.v[0].x;
my = quad.v[0].y;
if(hge->Input_GetKeyState(HGEK_RBUTTON) || hge->Input_KeyDown(HGEK_LBUTTON))
{
hge->Input_GetMousePos(&nx, &ny);
move = true;
sx = GetPositionX();
sy = GetPositionY();
subx = nx - sx;
suby = ny - sy;
if ( abs(subx) > abs(suby) )
{
iter = abs(subx);
ms = subx;
subx = (subx < 0) ? -1.0f : 1.0f;
suby = (suby < 0 ) ? suby/abs(ms) : abs(suby/ms);
}
else
{
iter = abs(suby);
ms = suby;
suby = (suby < 0) ? -1.0f : 1.0f;
subx = (subx < 0 ) ? subx/abs(ms) : abs(subx/ms);
}
}
if (move)
{
if (iter >= shift)
{
iter-=shift;
this->SetPosition(
GetPositionX() + subx * shift,
GetPositionY() + suby * shift);
}
else
{
this->SetPosition(nx , ny);
move = false;
}
}
}
Хреновый из меня математик. Этот метод втыкается в функцию фрейминга. И текстура едет по прямой туда, куда мышью тыкнешь.
Позже узнал, как можно тригонометрией в 5 строк написать такую же )
idec,
14 Февраля 2012
-
+153
- 1
- 2
- 3
- 4
- 5
dData->RowCount++;
for (int i = 0; i < dData->RowCount - 1; i++)
for (int j = 0; j < dData->ColumnCount; j++)
dData->Rows[i]->Cells[j]->Value = dData->Rows[i + 1]->Cells[j]->Value;
Мучил седня DataGridView, при dData->RowCount++ создавалась новая строчка в таблице, но только сверху. Остальное съезжало вниз на 1 ячейку. Я боролся полчаса с этим, пока не объяснил проблему товарищу. он предложил свой вариант всего кода:
dData->Rows->Add();
:DDDD
idec,
14 Февраля 2012
-
+1013
- 1
if (!done && (done = true)) setlocale(LC_CTYPE, "");
из свежих ворнингов компилера.
Dummy00001,
14 Февраля 2012
-
+148
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
vector<long long> fib;
for
(
long long a=1,b=1;
b=a+b,a=a+b,a>0&&b>0;
cout<<b<<" "<<a<<endl,
fib.push_back(b),
fib.push_back(a)
);
Just outputting fibonacci numbers as pairs and storing them in a vector...
wyand,
14 Февраля 2012
-
+997
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
for (int z=NewArray[y-1];z<(NewArray[y]-1);z++)
{
AnsiString ts = IntToStr(z+1);
int inum = -1;
try{
inum = StrToInt(ts);
} catch(...) {}
..... //дальше inum не используется
}
Завис надолго. Так и не понял, зачем автор преобразовывает ts обратно
dm-ua,
10 Февраля 2012
-
+1014
- 1
- 2
- 3
- 4
- 5
#ifndef _WIN32
std::ostream * dpOutputStream;
#else
ostream * dpOutputStream;
#endif
делаем код портабельным.
Dummy00001,
08 Февраля 2012
-
+1003
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
class fileOutStream : public ostream
{
public:
/* ... */
virtual inline int printf( const char * fpFormat, ... )
{
/* ... */
}
/* ... */
}
virtual inline метод.
Dummy00001,
08 Февраля 2012
-
+1004
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
class FuncFileOutStream: public fileOutStream
{
public:
/* ... */
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, bool b);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, char c);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, long l);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, int i);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, short s);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, const char* pc);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, float f);
friend FuncFileOutStream& operator<<(FuncFileOutStream& out, double d);
/* ... */
};
попытка перенаправления данных проходящих через ostream.
только маленькая тонкость. fileOutStream уже перенакрывает ostream специально для этой цели - что бы собственный streambuf подставить, который данными проходящими через ostream и манипулирует используя два официальных виртуальных метода - вместо дюжины корявых операторов которые наверное и половины того что проект испульзует не покрывают. ну бляха муха поэтому же и сделали streambuf в стандарте, что бы вот таким маразмом не страдали...
Dummy00001,
08 Февраля 2012
-
+1007
- 1
- 2
- 3
- 4
- 5
#if defined( HPUX_11_31 )
#define BDYNAMIC_CAST( CLASS, OBJECT ) (( CLASS ) ( OBJECT ))
#else
#define BDYNAMIC_CAST( CLASS, OBJECT ) (dynamic_cast< CLASS >(( OBJECT )))
#endif
чуть кофе не похлебнулся.
при более детальном рассмотрении кода из-за которого это сделали, выяснилось что: (А) в проекте нет ни одного места где нужен динамик каст и (Б) половина наших С++ профисианалов не умеют пользоватся конст кастом (который по коду там и был им нужен, вместе со статик кастом).
Dummy00001,
08 Февраля 2012