C 棧學習 賦值運演算法的過載

2022-04-01 15:42:05 字數 1074 閱讀 1894

對於程式設計,向來都是編的少,看的多,這種錯誤的學習方法一直延續至今,所以像運算子過載這麼簡單的東西,還是不太熟,今天藉著學習棧的機會,自己寫了一下鏈棧中賦值運算子的過載函式,寫完之後對比了一下教材(《資料結構c++語言描述》任燕版),發現自己真是有種簡單問題複雜化的天賦——寫程式按部就班,不會優化。順便發現了教材中乙個小小的錯誤,在此加以糾正。

鏈棧賦值運算子的過載(自己寫的過載函式)

說明一下自己的函式:想要實現不管左值鏈棧是不是為空,都能將右值鏈棧整個拷貝過來,所以整體思路就是:首先賦值兩個鏈棧的公共部分的值,接著分為兩種情況:(a)左值鏈棧元素個數小於右值鏈棧元素個數;(b)左值鏈棧元素個數大於右值鏈棧元素個數。template

linkstack linkstack::operator = (linkstack rights)

// 左值鏈棧元素個數小於右值鏈棧元素個數

while (ls==null&&rs!=null)

// 左值鏈棧元素個數大於右值鏈棧元素個數

while (ls!=null&&rs==null)

}return *this;

}鏈棧賦值運算子的過載(《資料結構c++語言描述》任燕版)

看完作者的程式之後,覺得很汗顏,明明可以先將左值鏈棧清空,然後按照一種情況來拷貝呢,為啥就是想不到呢?哎,愚蠢之極。作者的**如下:template

linkstack linkstack::operator = (linkstack rights)

else

p=s;

rp=rp->next;

}if (p)

p->next=null;

}return *this;

}糾正乙個錯誤

但是,作者的**中存在乙個小小的錯誤,即沒有對指標p進行初始化,修改後程式如下:template

linkstack linkstack::operator = (linkstack rights)

else

p=s;

rp=rp->next;

}if (p)

p->next=null;

}return *this;

}

棧的應用 字尾運算法則

對於數字 進棧 對於符號 從棧中彈出右運算元 從棧中彈出左運算元 依據符號進行運算 將運算結果壓入棧中 遍歷結果 棧中唯一的數字為結果 偽演算法int compute const char exp 建立棧int i 0 while exp i 0 if 數字 輸出 else if 假設是符號 int...

C 賦值運算子過載

c 賦值運算子過載,為什麼要返回引用?查了許多資料,基本有兩種說法 一 c c 賦值運算子的本意為 返回左值的引用 左值 賦值號左面的變數而非其值 可用以下程式段測試 int a,b 3,c 2 a b c cout 對於x y x,y均為物件時 若不返回左值的引用,將會生成臨時物件。如果不處理x ...

C 過載賦值運算子

c 類建立時,會產生乙個預設的賦值運算子函式 a operator const a 普通類例項之間賦值可能沒問題,但當類成員變數中有指標引用的動態記憶體時,複製後只是簡單地將指標值複製,而沒有將其指向的動態記憶體也拷貝乙份,這樣即多個類例項內的指標指向同一動態記憶體,當類例項析構時,會導致這塊動態記...