65,210
社区成员
发帖
与我相关
我的任务
分享ITLI DataStruct::PushBack(BOX *Box, const DATA Data)
{
assert(NULL != Box);
Box->push_back(Data);
//Box->end()指向的不是最后一个元素,而是最后个的后面
return -- Box->end();
}#include <iostream>
#include <fstream>
#include <list>
#include <vector>
#include <algorithm>
#include <time.h>
#include <assert.h>
#include <Windows.h>
using namespace std;
typedef unsigned char DATA;
typedef std::list<DATA> BOX; //基础容器类型
typedef BOX::iterator ITLI; //容器指针类型
void Log(char *szBuz)
{
FILE *fp;
SYSTEMTIME tt;
GetLocalTime(&tt);
char sBuz[200] = "";
sprintf(sBuz, "%d-%d-%d %d:%d:%d %s\n",
tt.wMonth,
tt.wDay,
tt.wHour,
tt.wMinute,
tt.wSecond,
tt.wMilliseconds,
szBuz);
OutputDebugStringA(szBuz);
if((fp = fopen("D:\\Test_STL.txt", "a+")) == NULL)
return ;
if (fwrite(sBuz, sizeof(char), strlen(sBuz), fp ) <= 0 )
return ;
fclose(fp);
}
int main()
{
Log("Start STL");
for (int j = 0; j < 10000; ++ j)
{
BOX *aa = new BOX;
for (int i = 0; i < 100; ++ i)
{
aa->push_back(i);
}
delete aa;
}
Log("Finished STL");
return 0;
}#ifndef DEFINE_2010_03_28_H_
#define DEFINE_2010_03_28_H_
typedef unsigned char VALUE;
struct DATA
{
VALUE Value;
VALUE DyValue;
DATA *Link;
DATA *Inherit;
};
#endif#ifndef DATASTRUCT_2010_03_28_H_
#define DATASTRUCT_2010_03_28_H_
#pragma once
#include "Define.h"
#include <time.h>
#include <assert.h>
#include <iostream>
#include <fstream>
class DataStruct
{
public:
DataStruct();
virtual ~DataStruct();
virtual DATA* Create();
virtual DATA* Create(const VALUE Count);
virtual bool PushBack(DATA *Head, const VALUE Value);
virtual bool Destory(DATA *Head);
protected:
private:
};
#endif#pragma once
#include "DataStruct.h"
DataStruct::DataStruct()
{
}
DataStruct::~DataStruct()
{
}
DATA* DataStruct::Create()
{
DATA *Head = (DATA*)malloc(sizeof(DATA));
memset(Head, 0, sizeof(DATA));
return Head;
}
DATA* DataStruct::Create(const VALUE Count)
{
DATA *Head = Create();
DATA *Temp = Head;
while (NULL != Temp->Link)
{
Temp = Temp->Link;
}
for (VALUE i = 0; i < Count; ++ i)
{
DATA *theNew = (DATA*)malloc(sizeof(DATA));
memset(theNew, 0, sizeof(DATA));
Temp->Link = theNew;
//这时Temp指向的是Head的地址,因此Temp->Link = theNew等于将Head->Link赋值,得到了theNew的地址
Temp = theNew;
//这时再将Temp这个“路标”改向为theNew的地址,以后的Temp其实就是现在的theNew了
//Temp和theNew都是一个指针,代表着一个被指向的地址
//Temp = theNew这句并不是将Next里的数值全部赋给Temp,而是将Temp原先指向的地址改为指向theNew,
//并没有动Temp原先指向的地址里(结构)的数据。
}
return Head;
}
bool DataStruct::Destory(DATA *Head)
{
assert(NULL != Head);
DATA *Temp = Head;
while (NULL != Head->Link)
{
Temp = Head;
Head = Head->Link;
free(Temp);
}
free(Head); //这时Head指向的是最后一个单元,并未删除,因此要记得删
return true;
}
bool DataStruct::PushBack(DATA *Head, const VALUE Value)
{
assert(NULL != Head);
DATA *Temp = Head;
while (NULL != Temp->Link)
{
Temp = Temp->Link;
}
DATA *theNew = (DATA*)malloc(sizeof(DATA));
memset(theNew, 0, sizeof(DATA));
Temp->Link = theNew;
theNew->Value = Value;
return true;
}#pragma once
#include "DataStruct.h"
#include <Windows.h>
using namespace std;
void Log(char *szBuz)
{
FILE *fp;
SYSTEMTIME tt;
GetLocalTime(&tt);
char sBuz[200] = "";
sprintf(sBuz, "%d-%d-%d %d:%d:%d %s\n",
tt.wMonth,
tt.wDay,
tt.wHour,
tt.wMinute,
tt.wSecond,
tt.wMilliseconds,
szBuz);
OutputDebugStringA(szBuz);
if((fp = fopen("D:\\Test_Link.txt", "a+")) == NULL)
return ;
if (fwrite(sBuz, sizeof(char), strlen(sBuz), fp ) <= 0 )
return ;
fclose(fp);
}
int main()
{
DataStruct *theData = new DataStruct;
Log("Start Link");
for (int j = 0; j < 10000; ++ j)
{
DATA *Temp = theData->Create();
for (int i = 0; i < 100; ++ i)
{
theData->PushBack(Temp, i);
}
theData->Destory(Temp);
}
Log("Finished Link");
delete theData;
return 0;
}