STL 向量是否通过 reference/address?
Are STL vectors pass by reference/address?
我正在解决一个递归问题。在解决的过程中,我陷入了一个我无法弄清楚的位置:
#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;
}
在此代码中,我将 v
作为参考传递,但是当我尝试在没有参考的情况下传递它时,有趣的是,这两个代码都有效。
#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;
}
你能解释一下为什么会这样吗?
在通过引用传递的情况下,您将推入与传入相同的 vector
。
然而,当您按值传递时,您将推入 vector
的 副本。但是随后您返回 vector
,其中 returns 是本地副本,然后您将其(最终)分配给 main
中的 vector v
。这就是使代码看起来像做同样事情的原因,即使实际上并没有。