- 1
- 2
- 3
- 4
- 5
- 6
A* arr = new A[size];
std::vector<A*> vec(size);
for(size_t i=0; i<size; ++i)
vec.push_back(&a[i])
// Do something with vec
delete[] arr;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+144.8
A* arr = new A[size];
std::vector<A*> vec(size);
for(size_t i=0; i<size; ++i)
vec.push_back(&a[i])
// Do something with vec
delete[] arr;
+144.8
/**
* Helper classes for computing window query on rectangles
*/
class VerticalSegmentIntersect : public std::unary_function < PRGlyph, ptrdiff_t > {
ptrdiff_t m_Lhs;
ptrdiff_t m_Rhs;
public:
VerticalSegmentIntersect ( ptrdiff_t top, ptrdiff_t bottom ) throw() : m_Lhs(top+top), m_Rhs(bottom+bottom) {}
ptrdiff_t operator() ( PRGlyph inpGlyph ) const throw() {
QRect const* area = inpGlyph->GetGlyphArea();
ptrdiff_t x = area->bottom() + area->top(), y = area->bottom() - area->top();
if (y < x - m_Rhs ) return 0;
if (y < m_Lhs - x ) return 0;
return 1;
}
};
class HorisontalSegmentIntersect : public std::unary_function < PRGlyph, ptrdiff_t > {
ptrdiff_t m_Lhs;
ptrdiff_t m_Rhs;
public:
HorisontalSegmentIntersect ( ptrdiff_t left, ptrdiff_t right ) throw() : m_Lhs(left+left), m_Rhs(right+right) {}
ptrdiff_t operator() ( PRGlyph inpGlyph ) const throw() {
QRect const* area = inpGlyph->GetGlyphArea();
ptrdiff_t x = area->right() + area->left(), y = area->right() - area->left();
if (y < x - m_Rhs ) return 0;
if (y < m_Lhs - x ) return 0;
return 1;
}
};
/**
* Helper classes for computing containment query on rectangles
*/
class VerticalSegmentContains : public std::unary_function < PRGlyph, ptrdiff_t > {
ptrdiff_t m_Lhs;
ptrdiff_t m_Rhs;
public:
VerticalSegmentContains ( ptrdiff_t top, ptrdiff_t bottom ) throw() : m_Lhs(top+top), m_Rhs(bottom+bottom) {}
ptrdiff_t operator() ( PRGlyph inpGlyph ) const throw() {
QRect const* area = inpGlyph->GetGlyphArea();
ptrdiff_t x = area->bottom() + area->top(), y = area->bottom() - area->top();
if ( y > x - m_Lhs ) return 0;
if ( y > m_Rhs - x ) return 0;
return 1;
}
};
class HorisontalSegmentContains : public std::unary_function < PRGlyph, ptrdiff_t > {
ptrdiff_t m_Lhs;
ptrdiff_t m_Rhs;
public:
HorisontalSegmentContains ( ptrdiff_t left, ptrdiff_t right ) throw() : m_Lhs(left+left), m_Rhs(right+right) {}
ptrdiff_t operator() ( PRGlyph inpGlyph ) const throw() {
QRect const* area = inpGlyph->GetGlyphArea();
ptrdiff_t x = area->right() + area->left(), y = area->right() - area->left();
if ( y > x - m_Lhs ) return 0;
if ( y > m_Rhs - x ) return 0;
return 1;
}
};
// compute the window query on m_GlyphData rectangles
QVector<PRGlyph> :: iterator windowq = m_Selection.isValid() ?
std::partition ( m_GlyphData.begin(),
std::partition ( m_GlyphData.begin(), m_GlyphData.end(), VerticalSegmentIntersect ( m_Selection.top(), m_Selection.bottom() ) ),
HorisontalSegmentIntersect ( m_Selection.left(), m_Selection.right() )
) : m_GlyphData.begin();
// compute the containment query on window query rectangles (the containment query resuls is always subset of window query )
QVector<PRGlyph> :: iterator containq = std::partition ( m_GlyphData.begin(),
std::partition ( m_GlyphData.begin(), windowq, VerticalSegmentContains ( m_Selection.top(), m_Selection.bottom() ) ),
HorisontalSegmentContains ( m_Selection.left(), m_Selection.right() )
);
Способ быстренько находить прямоугольники, пересекающиеся с входным и содержимые им же. Применимо для прямоугольных параллелепипедов любой размерности.
+912.2
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n==1) cout<<"A";
if(n==2) cout<<"B";
if(n==3) cout<<"AB";
if(n==4) cout<<"BAB";
if(n==5) cout<<"ABBAB";
if(n==6) cout<<"BABABBAB";
if(n==7) cout<<"ABBABBABABBAB";
if(n==8) cout<<"BABABBABABBABBABABBAB";
if(n==9) cout<<"ABBABBABABBABBABABBABABBABBABABBAB";
if(n==10) cout<<"BABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBAB";
if(n==11) cout<<"ABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBAB";
if(n==12) cout<<"BABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBAB";
if(n==13) cout<<"ABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBAB";
if(n==14) cout<<"BABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBAB";
if(n==15) cout<<"ABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBABABBABBABABBABBABABBABABBABBABABBAB";
return 0;
}
строки Фибаначи. (=
+54.6
#include <iostream>
class TerVer {
public:
short d1, d2, d3, d4;
short totalCounter, goodCounter;
bool DoneInc;
TerVer(): d1(1), d2(0), d3(0), d4(0), totalCounter(1), goodCounter(0), DoneInc(false) {}
bool IsGood() {
return (
(d1==d2 && d1!=d3 && d1!=d4 && d3!=d4) ||
(d1==d3 && d1!=d2 && d1!=d4 && d2!=d4) ||
(d1==d4 && d1!=d2 && d1!=d3 && d2!=d3) ||
(d2==d3 && d2!=d1 && d2!=d4 && d1!=d4) ||
(d2==d4 && d2!=d1 && d2!=d3 && d1!=d3) ||
(d3==d4 && d3!=d1 && d3!=d2 && d1!=d2)
) ? true : false;
}
void Inc() {
d4++;
if(d4>9) { d4=0; d3++; if(d3>9) {d3=0; d2++; if(d2>9) { d2=0; d1++; if(d1>9) DoneInc = true; } } }
if (!DoneInc) { totalCounter++; if (IsGood()) goodCounter++; }
}
};
int main() {
TerVer z;
while(!z.DoneInc) {
z.Inc();
}
cout << z.goodCounter << " / " << z.totalCounter << " = " << (double)z.goodCounter/z.totalCounter << endl;
return 0;
}
Найти вероятность того, что в случайном четырехзначном числе ровно две цифры совпадают.
Вот что бывает, когда лень думать.
+940.8
bool checkForExe(std::string ext)
{
return ext==".exe" ? true :
ext==".Exe" ? true :
ext==".eXe" ? true :
ext==".EXe" ? true :
ext==".exE" ? true :
ext==".ExE" ? true :
ext==".eXE" ? true :
ext==".EXE" ? true : false;
}
Нашел в одной моей очень древней программе-шутке. Регистронезависимая проверка на расширение .exe.
+144.8
#define THIS_FILE __FILE__
#define Default 0xFFFFFFFF
void* __cdecl operator new(size_t nSize, LPCSTR lpszFileName, int nLine=Default)
{
void * v = ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
return v;
}
void __cdecl operator delete(void * _P, char*){
::delete (_P);
}
Какие страсти...
+59.8
void addItem(QStringList &lst, QTreeWidget *ptwg)
{
bool a0 = false;
for (int i = 0; i < ptwg->topLevelItemCount(); ++i) {
if (lst.at(0) == ptwg->topLevelItem(i)->text(0)) {
a0 = true;
bool a1 = false;
QTreeWidgetItem *itm0 = ptwg->topLevelItem(i);
for (int j = 0; j < itm0->childCount(); ++j) {
if (lst.at(1) == itm0->child(j)->text(1)) {
a1 = true;
bool a2 = false;
QTreeWidgetItem *itm1 = itm0->child(j);
for (int k = 0; k < itm1->childCount(); ++k) {
if (lst.at(2) == itm1->child(k)->text(2)) {
a2 = true;
bool a3 = false;
QTreeWidgetItem *itm2 = itm1->child(k);
for (int l = 0; l < itm2->childCount(); ++l) {
if (lst.at(3) == itm2->child(l)->text(3)) {
a3 = true;
QTreeWidgetItem *itm3 = itm2->child(l);
QTreeWidgetItem *itm4 = new QTreeWidgetItem(itm3, QStringList() << "" << "" << "" << "" << lst.at(4));
break;
}
}
if (!a3) {
QTreeWidgetItem *itm3 = new QTreeWidgetItem(itm2, QStringList() << "" << "" << "" << lst.at(3));
QTreeWidgetItem *itm4 = new QTreeWidgetItem(itm3, QStringList() << "" << "" << "" << "" << lst.at(4));
}
break;
}
}
if (!a2) {
QTreeWidgetItem *itm2 = new QTreeWidgetItem(itm1, QStringList() << "" << "" << lst.at(2));
QTreeWidgetItem *itm3 = new QTreeWidgetItem(itm2, QStringList() << "" << "" << "" << lst.at(3));
QTreeWidgetItem *itm4 = new QTreeWidgetItem(itm3, QStringList() << "" << "" << "" << "" << lst.at(4));
}
break;
}
}
if (!a1) {
QTreeWidgetItem *itm1 = new QTreeWidgetItem(itm0, QStringList() << "" << lst.at(1));
QTreeWidgetItem *itm2 = new QTreeWidgetItem(itm1, QStringList() << "" << "" << lst.at(2));
QTreeWidgetItem *itm3 = new QTreeWidgetItem(itm2, QStringList() << "" << "" << "" << lst.at(3));
QTreeWidgetItem *itm4 = new QTreeWidgetItem(itm3, QStringList() << "" << "" << "" << "" << lst.at(4));
}
break;
}
}
if (!a0) {
QTreeWidgetItem *itm0 = new QTreeWidgetItem(ptwg, QStringList() << lst.at(0));
QTreeWidgetItem *itm1 = new QTreeWidgetItem(itm0, QStringList() << "" << lst.at(1));
QTreeWidgetItem *itm2 = new QTreeWidgetItem(itm1, QStringList() << "" << "" << lst.at(2));
QTreeWidgetItem *itm3 = new QTreeWidgetItem(itm2, QStringList() << "" << "" << "" << lst.at(3));
QTreeWidgetItem *itm4 = new QTreeWidgetItem(itm3, QStringList() << "" << "" << "" << "" << lst.at(4));
}
}
Функция = ) Добавляет в контрол иерархического дерева (5 уровней) элемент, не перерисовывая при этом само дерево, не закрывая никаких открытых веток.
+63.6
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( CONST FLOAT *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
x = pf[0];
y = pf[1];
}
D3DXINLINE
D3DXVECTOR2::D3DXVECTOR2( CONST D3DXFLOAT16 *pf )
{
#ifdef D3DX_DEBUG
if(!pf)
return;
#endif
D3DXFloat16To32Array(&x, pf, 2);
}
D3DXINLINE BOOL
D3DXVECTOR3::operator == ( CONST D3DXVECTOR3& v ) const
{
return x == v.x && y == v.y && z == v.z;
}
D3DXINLINE BOOL
D3DXVECTOR3::operator != ( CONST D3DXVECTOR3& v ) const
{
return x != v.x || y != v.y || z != v.z;
}
Во-первых, классный "режим отладки". Если D3DX_DEBUG определён, то при нулевом указателе pf происходит тихий возврат. Совершенно, так сказать, по-английски. А вот анализ второй функции показывает, что данный исходник вообще не получится собрать с D3DX_DEBUG. Наглядная иллюстрация вреда тупого копипаста. Определения операторов == и != демонстрируют, как не надо сравнивать вещественные числа.
Кто же автор этого безобразия? Имя не известно, зато известно место работы. Ибо этот "код" полностью представлен в файле d3dx9math.inl от компании Microsoft.
+55.4
#include <math.h>
#include <assert.h>
#include "vector10d.h"
float vcompare_epsilon10d = 0.0005f;
ml inlined float v10d_getElement(vec10d *v, int index)
{
assert( v != 0);
assert( index >= 0 );
assert( index < 3 );
return (* ((&((v)->x)) + (index) ));
}
ml inlined bool v10d_isValid(const vec10d *v)
{
if(v == 0) return g_false;
if((v->x * v->x) < 0.0f)return g_false;
if((v->y * v->y) < 0.0f)return g_false;
if((v->z * v->z) < 0.0f)return g_false;
if((v->w * v->w) < 0.0f)return g_false;
if((v->m * v->m) < 0.0f)return g_false;
if((v->n * v->n) < 0.0f)return g_false;
if((v->o * v->o) < 0.0f)return g_false;
if((v->p * v->p) < 0.0f)return g_false;
if((v->r * v->r) < 0.0f)return g_false;
if((v->s * v->s) < 0.0f)return g_false;
return g_true;
}
ml inlined void v10d_set(vec10d *v, float x, float y, float z, float w, float m,
float n, float o, float p, float r, float s)
{
assert(v = 0);
v->x=x;
v->y=y;
v->z=z;
v->w=w;
v->m=m;
v->n=n;
v->o=o;
v->p=p;
v->r=r;
v->s=s;
assert( v10d_isValid(v) != g_false );
}
ml inlined void v10d_get(const vec10d *v, float *x, float *y, float *z, float *w,
float *m, float *n, float *o, float *p, float *r, float *s)
{
assert ( v != 0 );
assert ( x != 0 );
assert ( y != 0 );
assert ( z != 0 );
assert ( w != 0 );
assert ( m != 0 );
assert ( n != 0 );
assert ( o != 0 );
assert ( p != 0 );
assert ( r != 0 );
assert ( s != 0 );
assert( v10d_isValid(v) != g_false );
*x = v->x;
*y = v->y;
*z = v->z;
*w = v->w;
*m = v->m;
*n = v->n;
*o = v->o;
*p = v->p;
*r = v->r;
*s = v->s;
}
Сие чудо нарыл на просторах интернетов. Для ценителей весь исходник http://pastebin.org/114060 .. Очевидно чуваки писали очередной Crysis :)
+63.2
bool FindActualQtyOfWeightedReceptacle
( std::map<double,double> &ReceptacleWeighings,
const double ReceptacleId,
double &Weight)
{
Weight = 0.0;
bool recepFound = false;
for (std::map<double,double>::iterator iter = ReceptacleWeighings.begin();
iter != ReceptacleWeighings.end() && !recepFound;
iter++)
{ if (iter->first == ReceptacleId)
{ recepFound = true;
Weight = iter->second;
}
}
return(recepFound);
}
Во Франции одного ведущего (!) С++ программиста с ироничной фамилией Паскаль попросили таки ознакомиться со стандартными контейнерами из библиотеки STL. В частности с std::map. В итоге из-под палки он выдал вот такой "код". Возникает как минимум два вопроса:
1. производительность?
2. и зачем так многа букаф?
Пардон, Жан-Люк, не обижайся. Наговнокодил...