看著《c++程式設計思想》, 有點意思
#include #include #include using namespace std;
// element: 儲存元素
// cell : 儲存空間(除了element之外, 可能還有沒有利用、但是已經存在的cell空間)
const int increment = 100; // 定義每次膨脹的cell的個數
typedef struct cstashtag
cstash;
void initiallize(cstash* s, int size);
void cleanup(cstash* s);
int add(cstash* s, const void* element);
void* fetch(cstash* s, int index);
int count(cstash* s);
void inflate(cstash* s, int increase);
// 初始化後, 就知道每個cell的大小了, 若element為int, 則乙個cell的大小為4
void initialize(cstash* s, int sz)
int add(cstash* s, const void* element)
// 增加乙個element, 需要這個element中的值拷貝到下乙個cell空間
int startbytes = s->next * s->size;
unsigned char* e = (unsigned char*)element;
for(int i = 0; i < s->size; i++) //逐個位元組拷貝
s->next++; // element數目自增
return(s->next - 1); //最後乙個element的下標
}void* fetch(cstash* s,int index)
// 返回index所對應的位址
return &(s->storage[index * s->size]);
}int count(cstash* s)
void inflate(cstash* s, int increase)
delete (s->storage);//刪除舊的儲存空間
s->storage = b; //指向新的堆空間
s->quantity = newquantity; // 膨脹後的cell的總數
} void cleanup(cstash* s)
}int main()
// 列印cell空間中的element
for(i = 0; i < count(&intstash); i++)
// 如下**功能類似上面, 所以我就不注釋了
ifstream in;
string line;
const int bufsize = 80;
in.open("main.cpp");
initialize(&stringstash, sizeof(char) * bufsize);
while(getline(in, line))
i = 0;
char* cp = null;
while(null != (cp = (char*)fetch(&stringstash, i++)))
cleanup(&intstash);
cleanup(&stringstash);
return 0;
}
程式的結果為:01
2345
6789
#include
#include
#include
using namespace std;
// element: 儲存元素
// cell : 儲存空間(除了element之外, 可能還有沒有利用、但是已經存在的cell空間
const int increment = 100; // 定義每次膨脹的cell的個數
typedef struct cstashtag
cstash;
void initiallize(cstash* s, int size);
void cleanup(cstash* s);
int add(cstash* s, const void* element);
void* fetch(cstash* s, int index);
int count(cstash* s);
void inflate(cstash* s, int increase);
// 初始化後, 就知道每個cell的大小了, 若element為int, 則乙個cell的大小為4
void initialize(cstash* s, int sz)
int add(cstash* s, const void* element)
// 增加乙個element, 需要這個element中的值拷貝到下乙個cell空間
int startbytes = s->next * s->size;
unsigned char* e = (unsigned char*)element;
for(int i = 0; i < s->size; i++) //逐個位元組拷貝
s->next++; // element數目自增
return(s->next - 1); //最後乙個element的下標
}void* fetch(cstash* s,int index)
// 返回index所對應的位址
return &(s->storage[index * s->size]);
}int count(cstash* s)
void inflate(cstash* s, int increase)
delete (s->storage);//刪除舊的儲存空間
s->storage = b; //指向新的堆空間
s->quantity = newquantity; // 膨脹後的cell的總數
}void cleanup(cstash* s)
}int main()
// 列印cell空間中的element
for(i = 0; i < count(&intstash); i++)
// 如下**功能類似上面, 所以我就不注釋了
ifstream in;
string line;
const int bufsize = 80;
in.open("main.cpp");
initialize(&stringstash, sizeof(char) * bufsize);
while(getline(in, line))
i = 0;
char* cp = null;
while(null != (cp = (char*)fetch(&stringstash, i++)))
cleanup(&intstash);
cleanup(&stringstash);
return 0;
}freeing storage
freeing storage
其實, 從上面可以看到, cstash結構體顯得有點多餘, 直接用size, quantity, storage, next也是可以的。 之所以還要用結構體, 完全是為了整體性, 讓有點關係的size, quantity, storage, next成為乙個有機體, 便於理解, 便於程式設計, 便於維護, 這就是結構體的最大作用吧
c 程式設計思想 第一章
第一章 物件導言。7 19 在這一章討論了物件導向程式設計 opp 的思想和如何用這一思想解決軟體危機的問題。物件 我們可以設定乙個物件,並對他發出請求 發出乙個訊息 使它能夠為我們完成某種功能,可以向物件發出的請求是由他的介面 inte ce 定義的,而介面由型別確定。對於物件導向程式設計的三個特...
c 程式設計中的除錯技巧 C 程式設計思想
1.除錯標記 適用預處理 define定義乙個或多個除錯標記,在 中把除錯部分使用 ifdef 和 endif 進行管理。當程式最終除錯完成後,只需要使用 undef標記,除錯 就會消失。常用的除錯標記為debug,語句序列 define debug ifdef debug 除錯 endif 2.執...
C 程式設計的一些思想
看完c primer後,了解了c 的語法,但我想往思想,設計方面深究,所以我選擇了看c 程式設計思想。以下是第一章中我記下的筆記。oop 物件導向的程式設計 重用乙個類最簡單的方法就是直接使用這個類的物件,並且還可以講這個類的物件放到乙個新類的裡面。可以用任何數量和型別的其他物件組成新類,通過組合得...