したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

2416774さん:2010/07/20(火) 17:40:32
#include <iostream>
#include <cstring>
#include <windows.h>

#define nullptr NULL

class ITest{
public:
virtual auto TestFunction(unsigned int a, unsigned int b)->unsigned int = 0;
};

class CTest1 : public ITest{
public:
virtual auto TestFunction(unsigned int a, unsigned int b)->unsigned int;
};
class CTest2 : public ITest{
public:
virtual auto TestFunction(unsigned int a, unsigned int b)->unsigned int;
};

auto CTest1::TestFunction(unsigned int a, unsigned int b)->unsigned int{
unsigned int ret = 0;
for(unsigned int i = a; i <= b; ++i){
ret += i;
}
return ret;
}

auto CTest2::TestFunction(unsigned int a, unsigned int b)->unsigned int{
if(a <= b){
//普通
unsigned int n = b - a + 1;
unsigned int s = a + b;
if(n & 1){
//項数が奇数
return (s >> 1) * n;
}else{
//項数が偶数
return (n >> 1) * s;
}
}else{
//まず来ない
return 0;
}
}

auto memcpy_ore(void *dust, const void *source, std::size_t size)->void{
char *p = static_cast<char*>(dust);
const char *q = static_cast<const char*>(source);
while(size--)*p++=*q++;
}

auto main(int argc, char **argv)->int{
const unsigned int count = 100000000u;

timeBeginPeriod(1);

CTest1 ct1;
CTest2 ct2;
ITest *it[] = {&ct1, &ct2};

static unsigned int rets[count];
/*
{
DWORD start = timeGetTime();
for(unsigned int i = 0u; i < count; ++i){
rets[i] = ct1.TestFunction(0, i);
}
DWORD end = timeGetTime();

std::cout << "start:" << start << ",end:" << end << "," << (end - start) << "ms" << std::endl;
}

if((DWORD)&rets <= 0xffff){
MessageBox((HWND)&rets, nullptr, nullptr, MB_OK);
}
*/
{
DWORD start = timeGetTime();
for(unsigned int i = 0u; i < count; ++i){
rets[i] = ct2.TestFunction(0, i);
}
DWORD end = timeGetTime();

std::cout << "start:" << start << ",end:" << end << "," << (end - start) << "ms" << std::endl;
}

if((DWORD)&rets <= 0xffff){
MessageBox((HWND)&rets, nullptr, nullptr, MB_OK);
}
/*
{
DWORD start = timeGetTime();
for(unsigned int i = 0u; i < count; ++i){
rets[i] = it[0]->TestFunction(0, i);
}
DWORD end = timeGetTime();

std::cout << "start:" << start << ",end:" << end << "," << (end - start) << "ms" << std::endl;
}

if((DWORD)&rets <= 0xffff){
MessageBox((HWND)&rets, nullptr, nullptr, MB_OK);
}
*/
{
DWORD start = timeGetTime();
for(unsigned int i = 0u; i < count; ++i){
rets[i] = it[1]->TestFunction(0, i);
}
DWORD end = timeGetTime();

std::cout << "start:" << start << ",end:" << end << "," << (end - start) << "ms" << std::endl;
}

if((DWORD)&rets <= 0xffff){
MessageBox((HWND)&rets, nullptr, nullptr, MB_OK);
}

timeEndPeriod(1);
return 0;
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板