原创 深拷貝的現代寫法

#include<iostream> using namespace std; class String { public:            String(char * str="")          //不能strlen(NUL

原创 寫時拷貝(方案二)

方案二class String { private:     char* _str;     static int count; };設置一個靜態×××變量來計算指向一塊內存的指針的數量,每析構一次減1,直到它等於0(也就是沒有指針在指向它

原创 寫時拷貝(方案一)

深拷貝效率低,我們可以應引用計數的方式去解決淺拷貝中析構多次的問題。首先要清楚寫時拷貝是利用淺拷貝來解決問題!!方案一class String { private:     char* _str;     int _refCount; };

原创 比較分析與數組相關的sizeof和strlen

// 形如: int a[]={1,2,3,4,5}; char name[]="abcdef";無論是整型數組還是字符數組,數組名作爲右值的時候都代表數組首元素的首地址。數組發生降級(數組名退化爲數組首元素的地址)的情況:數組傳參、數組名

原创 將博客搬至CSDN

將博客搬至CSDN  http://www.cnblogs.com/Lynn-Zhang/

原创 分離編譯

    分離式編譯是指一個完整的程序或項目由若干個源文件共同實現,每個源文件單獨編譯生成目標文件,最後將該項目中的所有目標文件連接成一個單一的可執行文件的過程。    每個.cpp源文件經過預處理,它所包含的.h文件的代碼都會被展開到其中。

原创 Maze迷宮問題(最優解)

迷宮地形我們可以通過讀文件的形式,通過已知入口逐個遍歷座標尋找通路。文件如圖:每個座標的位置用結構體來記錄:struct Pos    //位置座標 {    int  _row;    int _col; };定義行列範圍#define 

原创 廣義表

廣義表是非線性結構,其定義是遞歸的。以下給出幾種簡單的廣義表模型:由上圖我們可以看到,廣義表的節點類型無非head、value、sub三種,這裏設置枚舉類型,利用枚舉變量來記錄每個節點的類型:enum  Type { HEAD,   //

原创 稀疏矩陣的壓縮存儲及轉置

沒有經過處理的稀疏矩陣其實就是一個特殊的二維數組,數組中的大部分元素是0或者其他類型的非法值,只有少數幾個非零元素。   爲了實現壓縮存儲,可以只存儲稀疏矩陣的非0元素。在存儲稀疏矩陣中的非0元素時,必須要存儲該元素的行列號以及元素值。我們

原创 對稱矩陣及對稱矩陣的壓縮存儲

設一個N*N的方陣A,A中任意元素A[i][j],當且僅當A[i][j] == A[j][i](0 <= i <= N-1 && 0 <= j <= N-1),則矩陣A是對稱矩陣。以矩陣的對角線爲分隔,分爲上三角和下三角。如上圖,對稱矩陣

原创 C語言實現單鏈表

鏈表結構:SList.h#pragma once typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SL

原创 程序的編譯流程

程序的基本流程如圖:1. 預處理預處理相當於根據預處理指令組裝新的C/C++程序。經過預處理,會產生一個沒有宏定義,沒有條件編譯指令,沒有特殊符號的輸出文件,這個文件的含義同原本的文件無異,只是內容上有所不同。讀取C/C++源程序,對其中的

原创 程序在內存中的分佈

代碼段(.text),也稱文本段(Text Segment),存放着程序的機器碼和只讀數據,可執行指令就是從這裏取得的。如果可能,系統會安排好相同程序的多個運行實體共享這些實例代碼。這個段在內存中一般被標記爲只讀,任何對該區的寫操作都會導致

原创 memcpy與memmove

函數原型:void* memcpy(void *dst,void const *src,size_t count) void* memmove(void *dst,void const *src,size_t count)頭文件:#incl

原创 菲波那切數列

//遞歸寫法 long long FibonacciSeq(int n) { if (n < 2) { return n; } return FibonacciSeq(n - 1) + FibonacciSeq(n - 2);