我正在解決一個遞回問題。在解決時,我陷入了無法弄清楚的境地:
#include<bits/stdc .h>
using namespace std;
vector<int> Search(int arr[],int in, int n, int t, vector<int> &v){//v passed as ref.
if(in == n){
return v;
}
if(arr[in] == t){
v.push_back(in);
}
return Search(arr, in 1, n, t, v);
}
int main(){
int arr[] = {1, 2, 3, 4, 5, 4, 7, 4, 9, 4};
vector<int> v;
v = Search(arr, 0, 10, 4, v);
for(int i = 0; i < v.size(); i ){
cout << v.at(i) << endl;
}
return 0;
}
在這段代碼中,我傳遞了vas 參考,但是當我嘗試在沒有參考的情況下傳遞它時,有趣的是這兩個代碼都有效。
#include<bits/stdc .h>
using namespace std;
vector<int> Search(int arr[], int in, int n, int t, vector<int> v){
if(in == n){
return v;
}
if(arr[in] == t){
v.push_back(in);
}
return Search(arr, in 1, n, t, v);
}
int main(){
int arr[] = {1, 2, 3, 4, 5, 4, 7, 4, 9, 4};
vector<int> v;
v = Search(arr, 0, 10, 4, v);
for(int i = 0; i < v.size(); i ){
cout << v.at(i) << endl;
}
return 0;
}
你能解釋為什么會發生這種情況嗎?
uj5u.com熱心網友回復:
在通過參考傳遞的情況下,您正在推入與vector您傳入相同的內容。
然而,當你按值傳遞你是推到一個副本的vector。但是隨后您將回傳vector回傳本地副本的 the ,然后您將其(最終)分配給vector vin main。這就是讓代碼看起來像做同樣的事情的原因,即使它沒有。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383346.html
上一篇:如何從遞回函式回傳值?
下一篇:帶鑰匙的遞回拼圖
