我想知道以下两个函数中哪个函数在时间和空间方面效率最高。他们都检查堆栈中某个元素的存在。第一个使用按值传递机制,而第二个使用按引用传递。我可能是错的,但我认为按值传递机制隐式复制参数,而在按引用传递中我们明确地这样做。
第一个版本按值传递:
template<class T>
bool find (stack<T> source, T value)
{
while (!source.isEmpty() && source.top() != value)
source.pop();
if (!source.isEmpty())
return true;
return false;
}
第二个版本按引用传递:
template<class T>
bool find (const stack<T> &source, T value)
{
stack<T> temp = source;
while (!temp.isEmpty() && temp.top() != value)
temp.pop();
if (!temp.isEmpty())
return true;
return false;
最佳答案
如果您打算在函数内部创建一个本地拷贝,请使用按值传递。它更简单,通常更简单。
附言当您返回 bool
结果时,您通常不需要 if
语句。
return !source.isEmpty();
关于c++ - C++中按值传递和按引用传递的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130482/