[問題] Stack using Array to implement

作者: dwight90488 (陳佳佳)   2017-10-11 21:36:55
開發平台(Platform): (Ex: Win10, Linux, ...)
Win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
C++
問題(Question):
在讀開放課程的資料結構的Stack章節時有些問題想釐清, 請各位大大指導 :)
void Stack<KeyType>::Add(const KeyType &x)
{
if(IsFull())
stack_full();
else
stack[++top]=x;
}
這是在做Stack push時的member function, 這裡傳入的參數為某個變數的reference
這邊傳入參數用pass by value或者pass by reference, 我想應該對這個stack出來
結果都是一樣的.
我的疑問是 使用reference或pointer的好處是當我們想要改到傳進參數的本體的時候,
可以直接把自己傳進去, 但是當像這stack push的例子, 有沒有改到傳進來的參數
根本沒有影響的情況下, 是否傳入參數使用pass by value或reference都沒關係?
還是說用reference有甚麼好處呢? (少copy這個動作?!)
作者: jerryh001   2017-10-11 22:18:00
你答對了另一種情況是某些不能複製的物件 就只能傳參考
作者: dwight90488 (陳佳佳)   2017-10-11 22:31:00
謝謝Jerryh001大大 想請問答對是指少copy這個動作嗎所以盡量在call function的傳入都使用pass byreference嗎? 即便只是傳到function做加法?
作者: jerryh001   2017-10-11 23:04:00
我是習慣都加& 不過如果只是小程式沒差很多就隨意
作者: dwight90488 (陳佳佳)   2017-10-11 23:07:00
謝謝您 傑瑞h001大大!!!!!
作者: jimfan (jimfan)   2017-10-13 00:07:00
好奇一問:stack[++top]=x; 有否將 x 複製呢?
作者: oToToT (屁孩)   2017-10-13 14:49:00
有吧,=operator通常會複製吧
作者: dwight90488 (陳佳佳)   2017-10-13 21:09:00
我覺得assignment 不會複製到x吧
作者: jerryh001   2017-10-13 21:51:00
會複製 你之後把x改掉 stack裡面是不會動到的
作者: Lipraxde (Lipraxde)   2017-10-13 22:03:00
j大前面說某些物件不能複製,這樣有衝突嗎?
作者: kingofsdtw (不能閒下來!!)   2017-10-13 22:56:00
找找operator ?"const" KeyType "&x" ,&x單純個人喜好
作者: jerryh001   2017-10-14 08:36:00
會 這時候stack的型態可以改成 那種物件的指標來避免

Links booklink

Contact Us: admin [ a t ] ucptt.com