[英]are vectors STL in c++ pass by reference/address?
我在解决递归问题时遇到了我卡在 position 中的问题,我无法弄清楚:
#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
,然后将其(最终)分配给main
中的vector v
。 这就是它看起来像代码做同样事情的原因,即使它没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.