-
+166
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
template <typename RetT> RetT Max() { return (RetT)0; }
template <typename RetT, typename ArgT, typename ... Args> RetT Max(ArgT Arg1, Args ... args)
{ RetT Temp = Max<RetT>(args ...); return ((RetT)Arg1 > Temp) ? ((RetT)Arg1) : (Temp); }
int main(int argc, char* argv[])
{
printf("%d\n", Max<int>(100, 200.356, false, -300));
return 0;
}
оцените полет человеческой мысли и чудеса нового стандарта С++0x... семпл мой, правда довольно редко используется...
ReL,
19 Апреля 2011
-
+167
- 1
int pm = pm == -2 ? -1 : pm_ == -1 ? mi : pm_;
Фрагмент из функции поиска, определение какого-то индекса.
Surendil,
19 Апреля 2011
-
+163
- 1
- 2
- 3
- 4
- 5
- 6
- 7
int F(x)
{
if (.chto-to) v.push_back(.koe-chto.);
int ind = somefunc(x);
for each y in x.childs
v[ind].res += F(y);
}
Не говнокод, но пример того, как из std::vector можно выстрелить себе в ногу
Комментарий автора кода ( http://codeforces.ru/blog/entry/1719#comment-32824 ):
такая штука получала крэш на компиляторе жюри, из-за того что сначала вычислялся адрес v[ind].res затем вызывалась снова F, которая пушбекает в вектор v, и может тем самым заставить вектор перевыделить память, тем самым адрес вычисленный ранее становился инвалидным.
я этот баг долго не мог найти, потомучто студия генерила нормальный код, не вызывающий креша
burdakovd,
18 Апреля 2011
-
+167
- 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
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
#include <windows.h>
struct io
{
io()
{
SetConsoleTitle(__FUNCSIG__);
}
~io()
{
DebugBreak();
}
} io_obj;
int main()
{
}
typedef void(fn_t)();
#pragma comment(linker, "/merge:.CRT=.rdata")
#pragma data_seg(".CRT$XCA")
extern "C" fn_t * start[] = {0};
#pragma data_seg(".CRT$XCZ")
extern "C" fn_t * finish[] = {0};
#pragma data_seg()
void call_dtors();
extern "C" void _initterm()
{
fn_t **p = start, **q = finish;
while (p < q)
{
if (*p)
(*p)();
++p;
}
main();
call_dtors();
}
fn_t * dtors[999];
int c_dtors;
void call_dtors()
{
while (c_dtors--)
dtors[c_dtors]();
}
extern "C" int atexit(void (__cdecl *func )( void ))
{
dtors[c_dtors++] = func;
return !"unspecified";
}
если клепаем что то без CRT и хотим чтоб вызывались
конструкторы деструкторы статических объектов и хотим свое то
вот реализация для тех кто этого еще неделал
https://wasm.ru/forum/viewtopic.php?pid=428250#p428250
rat4,
17 Апреля 2011
-
+165
- 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
//
// Занимательное программирование C++
// С.Симонович, Г.Евсеев, 2001
//
// Глава 12. Программа учится сочинять
//
void __fastcall TForm1::FormCreate
(TObject *Sender)
{
randomize();
ComboBox1->ItemIndex = 0;
ComboBox2->ItemIndex = 0;
ComboBox3->ItemIndex = 0;
}
void __fastcall TForm1::Button1Click
(TObject *Sender)
{
ComboBox1->ItemIndex =
random(ComboBox1->Items->Count);
ComboBox2->ItemIndex =
random(ComboBox2->Items->Count);
ComboBox3->ItemIndex =
random(ComboBox3->Items->Count);
}
Это моя первая книгка по Си++
печалько... тт
Surendil,
17 Апреля 2011
-
+149
- 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
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
//
// mainwindow.h
//
#ifndef MAINMDIWINDOW_H
#define MAINMDIWINDOW_H
/* >:0 Эти инклюды хуже, чем говно, чуть менее, чем полностью */
#include <QMainWindow>
#include <QMdiArea>
#include <QMenu>
#include <QAction>
#include <QMenuBar>
#include <QWebView>
#include <QFile>
#include <QSignalMapper>
#include <QDebug>
#include <QDomDocument>
#include <QToolBar>
#include <QButtonGroup>
#include <QLabel>
#include <QMdiSubWindow>
#include <QApplication>
#include "demoviewer.h"
#include "theoryviewer.h"
class MainMDIWindow : public QMainWindow
{ Q_OBJECT
public:
/* >:0 Кэп?! */
//! Выполняет создание и инициализацию окна приложения.
explicit MainMDIWindow(QWidget *parent = 0);
signals:
public slots:
/* >:0 А ты догадался, что значат эти аргументы? */
void openDocument(int); void loadPage(int);
/* >:0 Это невероятно полезные функции */
void toggleTheoryWindow(bool state) { tw->setVisible(state); }
void toggleDemoWindow(bool state) { dw->setVisible(state); }
protected:
/* >:0 Это на винде не работало, я просто закомментировал.
Вероятно, правильнее было бы воспользоваться средствами сборки под разные платформы,
но я невозбранно комметирую-раскомментирую эту строчку каждый раз при сборке */
inline void paintEvent(QPaintEvent *e)
{ // mdiArea->setBackground(QBrush(QImage(":/images/photo/s200.jpg").scaled(this->size(), Qt::KeepAspectRatioByExpanding)));
e->accept();
}
// ...
/* >:0 ЭтаПять! См. тело конструктора */
QString AppWindowTitle;
// Просмотровщики материала
DemoViewer * dv; QMdiSubWindow* dw;
TheoryViewer* tv; QMdiSubWindow* tw;
bool lockTheory, lockDemo;
// Хранение информации о документах
/* >:0 За такое я впредь обещаю безжалостно резать яйца. Даже себе. */
QVector< QVector< QHash< QString, QString > > > documents;
QVector< QHash< QString, QString > > *currentDocument;
// ...
};
#endif // MAINMDIWINDOW_H
//
// mainwindow.cpp
// Далее следуют отдельные вырезки
//
#include "mainmdiwindow.h"
MainMDIWindow::MainMDIWindow(QWidget *parent) : QMainWindow(parent)
{ /* >:0 Вот зачем нам понадобился атрибут QString AppWindowTitle! */
AppWindowTitle = tr("ЦВМ «Пламя-КВ» ЗРК С-200ВЭ");
setWindowTitle(AppWindowTitle);
// ...
// Инициализация окон просмотровщиков
/* >:0 Вы меня понимаете, не? хД */
tv = new TheoryViewer(); tw = mdiArea->addSubWindow(tv); tw->hide(); tv->setParent(tw); lockTheory = true;
dv = new DemoViewer(); dw = mdiArea->addSubWindow(dv); dw->hide(); dv->setParent(dw); lockDemo = true;
// ...
}
void MainMDIWindow::openDocument(int id)
{ // ...
/* >:0 Нижеследующая конструкция читает HTML файл в UTF-8,
заменяет пути на абсолютные и запихвает получивуюся какуху в QWebView */
QFile in(textLink); bool t = in.open(QIODevice::ReadOnly | QIODevice::Text);
tv->setHtml(QString::fromUtf8(in.readAll()).replace(QString("./"), QApplication::applicationDirPath() + '/'));
in.close();
// ...
}
ИМХО, это МЕГОКОД. И я обещаю больше так никогда не делать ^^
Вбросы говн в потоковых комментариях, начинающихся с православного смайла >:0
Surendil,
17 Апреля 2011
-
+177
- 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
// Задача "Сложный XOR", олимпиада ACM контестер Украина.
// Есть множество натуральных чисел от 0 до N. Играют двое игроков. Сначала один убирает из множества число,
// потом второй. Если в множестве есть (осталось) число, равное побитовому XOR двух выбранных чисел, убирают
// и его (в условии задачи битность числа не указана, но сказано, что 1 <= N <= 32). Играют пока в множестве
// есть числа. Проигрывает тот, который не может совершить ход (на ком кончились числа).
// Ввод - число N, вывод - игрок, который выиграл (оба игрока придерживаются выгодной стратегии).
#include <iostream>
#include <time.h>
using namespace std;
int main() {
int n;
cin >> n;
// Это очевидно
if (n==1) {
cout << "First";
return 0;
}
if (n==2) {
cout << "Second";
return 0;
}
// Это было в примере
if (n==3) {
cout << "First";
return 0;
}
int s = clock() % 2; // rand() не работал чето :)
if (s==0) {
cout << "First";
} else {
cout << "Second";
}
return 0;
}
Говноолимпиадам - говнорешения!
Скажете, зачем такое постить, это не говнокод... Фишка в том, что это незамысловатое решение *правильно прошло все тесты с первого раза!* :D
Actine,
16 Апреля 2011
-
+161
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
bool PipeChannelForPointer::byteReceived( uint8_t byte )
{
received[ byteidx ] = byte;
byteidx++;
if( byteidx == sizeof(void*) ){
byteidx = 0;
void *ptr = *((void**)received);
ptrReceived( ptr );
bool ret = ptrReceived( ptr );
if( ret == false )
return false;
}
return true;
}
panter_dsd,
14 Апреля 2011
-
+161
- 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
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
//main.cpp
#include "head.h"
int main()
{
//fcii.cpp
#include "head.h"
void odin (vector<Zapis> &mas)
{
Zapis buf;
cout<<"Введите номер УДК: ";
cin>>buf.id;
cout<<"Введите фамилию и инициалы автора: ";
cin>>buf.fio;
cout<<"Введите название книги: ";
cin>>buf.nazv;
cout<<"Введите год издания: ";
cin>>buf.god;
cout<<"Введите количество экземпляров: ";
cin>>buf.kol;
mas.resize(mas.size()+1,buf);
vivod (mas);
}
void dva (vector<Zapis> &mas)
{
char udk[4];
cout<<"Введите УДК книги, которую необходимо удалить: ";
cin>>udk;
int flag=1;
int k=0;
for (vector<Zapis>::iterator i=mas.begin();i!=mas.end();i++)
{
flag=1;
if (strlen(udk)==strlen(mas[k].id))
for (int j=0;udk[j]!=0;j++)
if (udk[j]!=mas[k].id[j])
flag=0;
if (flag==1)
{
mas.erase(i);
flag=-1;
break;
}
k++;
}
if (flag!=-1)
{
cout<<endl<<"Книги с данным УДК не существует"<<endl;
}
else vivod(mas);
}
void tri(vector<Zapis> &mas)
{
vector<int> mas_buf(mas.size());
for (int i=0;i<mas.size();i++)
mas_buf[i]=mas[i].god;
sort(mas_buf.begin(),mas_buf.end()) ;
for (int i=0;i<mas.size();i++)
mas[i].god=mas_buf[i];
vivod(mas);
}
int zapros (vector<Zapis> &mas)
{
int otvet;
cout<<endl<<"Если вы хотите добавить данные о книгах - нажмите 1;"<<endl;
cout<<"Если вы хотите удалить данные о списываемых книгах - нажмите 2;"<<endl;
cout<<"Если вы хотите упорядочить книги по годам издания - нажмите 3;"<<endl;
cout<<"Если вы хотите завершить работу программы - нажмите 0."<<endl;
cin>>otvet;
switch (otvet)
{
case 0: {return 0;}
case 1: {
odin(mas);
zapros(mas);break;
}
Взято отсюда: http://programmersforum.ru/forumdisplay.php?f=14
elenbert,
14 Апреля 2011
-
+165
- 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
Ckey::Ckey(const String& name, const String& suffix1, const String& suffix2, const String& suffix3)
{
ASSERT(name.Size(), "Key with emty name are invalid!");
if (!name.Size())
{
return;
}
PushBack(name);
if (!suffix1.Size())
{
return;
}
PushBack(suffix1);
if (!suffix2.Size())
{
return;
}
PushBack(suffix2);
if (!suffix3.Size())
{
return;
}
PushBack(suffix3);
}
Ну просто замечательный конструктор класса.
Собственно сам класс унаследован (public-ом, причем) от местной реализации класса vector, отсюда загадочные методы PushBack.
А String - это не менее замечательная, местная, реализация строк.
elenbert,
14 Апреля 2011