[问题] 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