繁体   English   中英

c++ 中的向量 STL 是否通过引用/地址传递?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM