1 #include "StdAfx.h" 2 #include3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int increment = 100;10 11 typedef struct CStashTag{12 int size;13 int quantity;14 int next;15 unsigned char* storage;16 }CStash;17 18 void initialize(CStash* s,int size);19 void cleanup(CStash* s);20 int add(CStash* s,const void* element);21 void* fetch(CStash* s,int index);22 int count(CStash* s);23 void inflate(CStash* s,int increase);24 25 void initialize(CStash* s,int sz){26 s->size = sz;27 s->quantity = 0;28 s->storage = 0;29 s->next = 0;30 }31 32 int add(CStash* s,const void* element){33 if(s->next >= s->quantity)34 inflate(s,increment);35 int startBytes = s->next * s->size;36 unsigned char* e=(unsigned char*)element;37 for(int i=0;i size;i++)38 s->storage[startBytes + i] = e[i];39 s->next++;40 return(s->next -1);41 }42 43 void* fetch(CStash* s,int index){44 assert(0 <= index);45 if(index >= s->next)46 return 0;47 return &(s->storage[index * s->size]);48 }49 50 int count(CStash* s){51 return s->next;52 }53 54 void inflate(CStash* s,int increase){55 assert(increase > 0);56 int newQuantity = s->quantity + increase;57 int newBytes = newQuantity * s->size;58 int oldBytes = s->quantity*s->size;59 unsigned char* b = new unsigned char[newBytes];60 for(int i=0;i storage[i];62 delete [](s->storage);63 s->storage = b;64 s->quantity = newQuantity;65 }66 67 void cleanup(CStash* s){68 if(s->storage != 0)69 {70 cout<<"freeing storage"< storage;72 }73 }74 75 int main()76 {77 CStash intStash,stringStash;78 int i;79 char* cp;80 ifstream in;81 string line;82 const int bufsize = 80;83 initialize(&intStash,sizeof(int));84 for(i =0;i<100;i++)85 add(&intStash,&i);86 for(i=0;i
执行结果: