我想知道以下兩個函數中哪一個在時間和空間上最有效。它們都檢查堆棧中是否存在某個元素。第一個使用傳值機制,而第二個使用傳遞引用。我可能是錯的,但我認爲傳值機制隱式地複製了參數,而在pass-by-ref中,我們明確地執行它。C++中傳遞值與傳遞引用之間的區別
第一版通過按值:
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;
}
你的假設大部分是正確的。按引用傳遞的效率與傳遞指向對象的指針效率相同。 –
此代碼看起來很熟悉..... :) –