貌似容器的运行效率很低

tomljr 2011-10-31 03:26:08
/*Head.h*/
#ifndef _HEAD_H_
#define _HEAD_H_
/*#include*/
#include <iostream>
/*typedef*/
typedef unsigned int UINT;
/*#define*/
#define MAX_INPUT_NUMBER 99999
#define MAX_ALLOC_LENTH 1024*888
#define MAX_INPUT_SIZE 256
#define MAX_INPUT_USE_SIZE 5
#define UP_BIT 10
#define D_WORDS 48
#endif

/*Main.c*/
#include "BasicData.h"
#include "SecondMethod.h"
#include "ThirdMethod.h"
int main()
{
BasicData AA;
AA.Function();
SecondMethod BB;
BB.Function();
ThirdMethod CC;
CC.Function();
return 0;
}

/*BasicData.h*/

#pragma once
#include "Head.h"
using namespace std;
/*普通字符数组类*/
class BasicData
{
public:
BasicData(void);
void Function(void);
private:
void GetNumber(void);
void DataPlus(void)
{
UINT ulI=0;
for(UINT ulTemp=0;ulI<=CurrLocal;++ulI)
{
ulTemp =pSubData[ulI]+pMainData[ulI]+ulUpBit;
pMainData[ulI] =ulTemp%UP_BIT;
ulUpBit =ulTemp/UP_BIT;
}
if(0!=ulUpBit)
{
pMainData[++CurrLocal]=ulUpBit;
ulUpBit=0;
}
}
void PlusData(void);
void Operation(void);
void DisPlayResault(void);
public:
virtual ~BasicData(void);
private:
UINT ulNumber;
char *pMainData;//DATA
char *pSubData;
UINT CurrLocal;
char ulUpBit;
time_t tStartTime;
time_t tEndTime;
};
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-10-31
  • 打赏
  • 举报
回复
好多代码
Ray-Soft 2011-10-31
  • 打赏
  • 举报
回复
#include "ThirdMethod.h"
#include <time.h>

ThirdMethod::ThirdMethod(void)
{
pBaseList=(resNode*)malloc(sizeof(resNode));
memset(pBaseList,0,sizeof(resNode));
pBaseList->cData=1;
pPlusList=(resNode*)malloc(sizeof(resNode));
memset(pPlusList,0,sizeof(resNode));
pPlusList->cData=1;
INIT_NODE(pBaseList);
INIT_NODE(pPlusList);
ulUpBit=0;
pBaseRear=pBaseList;
pPlusRear=pPlusList;
ulNumber=0xfffffff;
}

ThirdMethod::~ThirdMethod(void)
{
resNode *pTempBase=NULL;
for(;NULL!=pBaseList;)
{
pTempBase=pBaseList->next;
free(pBaseList);
pBaseList=pTempBase;
pTempBase=pPlusList->next;
free(pPlusList);
pPlusList=pTempBase;
}
}

void ThirdMethod::Function(void)
{
while(0xfffffff==ulNumber)
{
GetNumber();
}
tStartTime=time(0);
Operation();
tEndTime=time(0);
DisPlayResault();
}

void ThirdMethod::DisPlayResault(void)
{
if(0==ulNumber)
return;
FILE *fp=NULL;
UINT ulTemp=ulNumber;
UINT ulLenth=0;
char sFileName[MAX_INPUT_SIZE];
for(UINT i=0;ulTemp!=0;ulTemp/=UP_BIT,++i)
{
sFileName[i]=D_WORDS+ulTemp%UP_BIT;
ulLenth++;
}
sFileName[ulLenth--]='\0';

for(UINT i=0;i<ulLenth/2;++i)
{
sFileName[i] =sFileName[i]??'sFileName[ulLenth-i];
sFileName[ulLenth-i]=sFileName[ulLenth-i]??'sFileName[i];
sFileName[i] =sFileName[i]??'sFileName[ulLenth-i];
}
strcat_s(sFileName,MAX_INPUT_SIZE,"!-Method3.txt");
fopen_s(&fp,sFileName,"w");
system("cls");

resNode *pTempBase=pBaseRear;
for(;NULL!=pTempBase;pTempBase=pTempBase->prev)
{
putc(pTempBase->cData+D_WORDS,fp);
}
fprintf(fp,"\n\n\n计算用时 %u 秒\n",tEndTime-tStartTime);
cout<<"用时: "<<tEndTime-tStartTime<<"秒"<<endl;
fclose(fp);
}

void ThirdMethod::Operation(void)
{
if(0==ulNumber||1==ulNumber)
{
pBaseList->cData=0==ulNumber?0:1;
return ;
}
for(UINT i=2;i<=ulNumber;++i)
{
for(UINT j=i-1;j>0;--j)
{
DataPlus();
}
for(resNode *pTempBase=pBaseList,*pTempPlus=pPlusList;NULL!=pTempBase;\
pTempBase=pTempBase->next,pTempPlus=pTempPlus->next)
{
pTempPlus->cData=pTempBase->cData;
}
}
}

void ThirdMethod::GetNumber(void)
{
char sTemp[MAX_INPUT_SIZE];
puts("输入:");
gets_s(sTemp,MAX_INPUT_SIZE);
system("cls");
if(strlen(sTemp)>MAX_INPUT_USE_SIZE)
{
puts("位数超出最大范围!");
return;
}
for(UINT i=0;sTemp[i]!='\0';++i)
{
if(sTemp[i]>'9'||sTemp[i]<'0')
{
puts("输错了.");
return;
}
}
ulNumber=atoi(sTemp);
}
tomljr 2011-10-31
  • 打赏
  • 举报
回复

/*SecondMethod.cpp*/
#include "SecondMethod.h"
??=include <time.h>

SecondMethod::SecondMethod(void)
{
ulUpBit=0;
ulNumber=0xfffffff;
tStartTime=tEndTime=0;
DataBase.push_back(1);
DataPlus.push_back(1);
ItemBase=DataBase.begin();
IetmPlus=DataPlus.begin();
}

SecondMethod::~SecondMethod(void)
{
}

void SecondMethod::Function(void)
{
while(0xfffffff==ulNumber)
{
GetNumber();
}
tStartTime=time(0);
Operation();
tEndTime=time(0);
for(ItemBase=DataBase.end()-1,IetmPlus=DataPlus.begin();IetmPlus!=DataPlus.end()-1;++IetmPlus)
{
*ItemBase=*IetmPlus+48;
--ItemBase;
}
*ItemBase=*IetmPlus+48;
DisPlayResault();
}

void SecondMethod::DisPlayResault(void)
{
if(0==ulNumber)
return;
FILE *fp=NULL;
UINT ulTemp=ulNumber;
UINT ulLenth=0;
char sFileName[MAX_INPUT_SIZE];
for(UINT i=0;ulTemp!=0;ulTemp/=UP_BIT,++i)
{
sFileName[i]=D_WORDS+ulTemp%UP_BIT;
ulLenth++;
}
sFileName[ulLenth--]='\0';

for(UINT i=0;i<ulLenth/2;++i)
{
sFileName[i] =sFileName[i]??'sFileName[ulLenth-i];
sFileName[ulLenth-i]=sFileName[ulLenth-i]??'sFileName[i];
sFileName[i] =sFileName[i]??'sFileName[ulLenth-i];
}
strcat_s(sFileName,MAX_INPUT_SIZE,"!-Method1.txt");
fopen_s(&fp,sFileName,"w");
system("cls");
fprintf(fp,"%d!= \n",ulNumber);

for(ItemBase=DataBase.begin();ItemBase!=DataBase.end();++ItemBase)
{
putc(*ItemBase+D_WORDS,fp);
}
fprintf(fp,"\n\n\n计算用时 %u 秒\n",tEndTime-tStartTime);
cout<<"用时: "<<tEndTime-tStartTime<<"秒"<<endl;
fclose(fp);
}

void SecondMethod::Operation(void)
{
if(0==ulNumber||1==ulNumber)
{
*ItemBase=(0==ulNumber)?0:1;
return ;
}
for(UINT i=2;i<=ulNumber;++i)
{
for(UINT j=i-1;j>0;--j)
{
DataPlusFun();
}
for(ItemBase=DataBase.begin(),IetmPlus=DataPlus.begin();ItemBase!=DataBase.end();++ItemBase,++IetmPlus)
{
*IetmPlus=*ItemBase;
}
}
}

void SecondMethod::DataPlusFun()
{
UINT ulI=0;
for(ItemBase=DataBase.begin(),IetmPlus=DataPlus.begin();ItemBase!=DataBase.end();++ItemBase,++IetmPlus)
{
ulI=*IetmPlus+*ItemBase+ulUpBit;
*ItemBase=ulI%UP_BIT;
ulUpBit=ulI/UP_BIT;
}
if(0!=ulUpBit)
{
DataBase.push_back(ulUpBit);
DataPlus.push_back(0);
ulUpBit=0;
}
}

void SecondMethod::GetNumber(void)
{
char sTemp[MAX_INPUT_SIZE];
puts("输入:");
gets_s(sTemp,MAX_INPUT_SIZE);
system("cls");
if(strlen(sTemp)>MAX_INPUT_USE_SIZE)
{
puts("位数超出最大范围!");
return;
}
for(UINT i=0;sTemp[i]!='\0';++i)
{
if(sTemp[i]>'9'||sTemp[i]<'0')
{
puts("输错了.");
return;
}
}
ulNumber=atoi(sTemp);
}
tomljr 2011-10-31
  • 打赏
  • 举报
回复
/*BasicData.cpp*/
#include "BasicData.h"
#include <time.h>
BasicData::BasicData(void)
{
ulNumber=0xfffffff;
ulUpBit=0;
pMainData=new char[MAX_ALLOC_LENTH];
memset(pMainData,0,sizeof(char)*MAX_ALLOC_LENTH);
pMainData[0]=1;
pSubData=new char[MAX_ALLOC_LENTH];
memset(pSubData,0,sizeof(char)*MAX_ALLOC_LENTH);
pSubData[0]=1;
tStartTime=tEndTime=CurrLocal=0;
}

BasicData::~BasicData(void)
{
delete pSubData;
delete pMainData;
}

void BasicData::Function(void)
{
while(0xfffffff==ulNumber)
{
GetNumber();
}
tStartTime=time(0);
Operation();
tEndTime=time(0);
DisPlayResault();
}
void BasicData::GetNumber(void)
{
char sTemp[MAX_INPUT_SIZE];
puts("输入:");
gets_s(sTemp,MAX_INPUT_SIZE);
system("cls");
if(strlen(sTemp)>MAX_INPUT_USE_SIZE)
{
puts("位数超出最大范围!");
return;
}
for(UINT i=0;sTemp[i]!='\0';++i)
{
if(sTemp[i]>'9'||sTemp[i]<'0')
{
puts("输错了.");
return;
}
}
ulNumber=atoi(sTemp);
}
void BasicData::Operation(void)
{
if(0==ulNumber||1==ulNumber)
{
pMainData[0]=0==ulNumber?0:1;
return ;
}
for(UINT i=2;i<=ulNumber;++i)
{
for(UINT j=i-1;j>0;--j)
{
DataPlus();
// PlusData();
}
memcpy(pSubData,pMainData,CurrLocal+1);
#if 0
system("cls");
cout<<i<<"! Over!";
#endif
}
}

void BasicData::DisPlayResault(void)
{

if(0==ulNumber)
return;
FILE *fp=NULL;
UINT ulTemp=ulNumber;
UINT ulLenth=0;
char sFileName[MAX_INPUT_SIZE];
for(UINT i=0;ulTemp!=0;ulTemp/=UP_BIT,++i)
{
sFileName[i]=D_WORDS+ulTemp%UP_BIT;
ulLenth++;
}
sFileName[ulLenth--]='\0';

for(UINT i=0;i<ulLenth/2;++i)
{
sFileName[i] =sFileName[i]??'sFileName[ulLenth-i];
sFileName[ulLenth-i]=sFileName[ulLenth-i]??'sFileName[i];
sFileName[i] =sFileName[i]??'sFileName[ulLenth-i];
}
/*
_itoa(ulNumber,sFileName,10);
*/
strcat_s(sFileName,MAX_INPUT_SIZE,"!-Method1.txt");
fopen_s(&fp,sFileName,"w");
system("cls");
fprintf(fp,"%d!= \n",ulNumber);
for(int i=CurrLocal;i>=0;--i)
{
putc(pMainData[i]+D_WORDS,fp);
}
fprintf(fp,"\n\n\n计算用时 %u 秒\n",tEndTime-tStartTime);
cout<<"用时: "<<tEndTime-tStartTime<<"秒"<<endl;
fclose(fp);
}

void BasicData::PlusData(void)
{
UINT ulI=0;
for(char ulTemp=0;ulI<=CurrLocal;++ulI)
{
ulTemp =pSubData[ulI]+pMainData[ulI]+ulUpBit;
pMainData[ulI] =ulTemp%UP_BIT;
ulUpBit =ulTemp/UP_BIT;
}
if(0!=ulUpBit)
{
pMainData[++CurrLocal]=ulUpBit;
ulUpBit=0;
}
}
tomljr 2011-10-31
  • 打赏
  • 举报
回复
/*SecondMethod.h*/
#pragma once
#include "Head.h"
using namespace std;
#include <vector>
/*vector容器类*/
class SecondMethod
{
public:
SecondMethod(void);
void Function(void);
private:
void GetNumber(void);
void Operation(void);
void DataPlusFun(void);
void DisPlayResault(void);
public:
virtual ~SecondMethod(void);
private:
UINT ulNumber;
vector<char> DataBase;
vector<char> DataPlus;
time_t tStartTime;
time_t tEndTime;
char ulUpBit;
vector<char>::iterator ItemBase;
vector<char>::iterator IetmPlus;
};

/*ThirdMethod.h*/
#pragma once
#include "Head.h"
using namespace std;
/*链表类*/
typedef struct lnode
{
char cData;
struct lnode *next, *prev;
}resNode;
/**/
#define INIT_NODE(list) (list)->next=(list)->prev=NULL

/*ThirdMethod Class*/
class ThirdMethod
{
public:
ThirdMethod(void);
void Function(void);
private:
void Operation(void);
void DataPlus(void)
{
resNode *pTempBase=pBaseList;
resNode *pTempPlus=pPlusList;
char cTemp=0;
for(;NULL!=pTempBase;pTempBase=pTempBase->next,pTempPlus=pTempPlus->next)
{
cTemp=pTempBase->cData+pTempPlus->cData+ulUpBit;
pTempBase->cData=cTemp%UP_BIT;
ulUpBit=cTemp/UP_BIT;
}
if(0!=ulUpBit)
{
resNode *pAddNode;
pAddNode=(resNode*)malloc(sizeof(resNode));
pAddNode->cData=ulUpBit;
ulUpBit=0;
pBaseRear->next=pAddNode;
pAddNode->prev=pBaseRear;
pAddNode->next=NULL;
pBaseRear=pAddNode;
pAddNode=(resNode*)malloc(sizeof(resNode));
pAddNode->cData=0;
pPlusRear->next=pAddNode;
pAddNode->next=NULL;
pAddNode->prev=pPlusRear;
pPlusRear=pAddNode;
}
}
void GetNumber(void);
void DisPlayResault(void);
public:
virtual ~ThirdMethod(void);
private:
UINT ulNumber;
resNode *pBaseList;
resNode *pPlusList;
resNode *pBaseRear;
resNode *pPlusRear;
char ulUpBit;
time_t tStartTime;
time_t tEndTime;
};

33,312

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧