当我们将一个向量传递给一个函数时,为什么我们不能像数组那样做呢?
例如:
#include<bits/stdc++.h>
using namespace std;
void func(vector<int> vect)
{
vect.push_back(30);
}
int main()
{
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(vect);
for (int i = 0; i<vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
在这个例子中,它工作正常。但是如果我这样做,为什么它不像数组那样工作?
#include<bits/stdc++.h>
using namespace std;
void func(vector<int> *vect)
{
vect.push_back(30);
}
int main()
{
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(&vect[0]);
for (int i = 0; i<vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
就像数组一样,为什么这是不可能的?
很有可能,但是您传递的是向量的元素,而不是向量本身:
void func(vector<int> *vect) {
vect->push_back(30); // <-- pointer type expression
}
int main() {
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(&vect); // <-- pass the vector
for (size_t i = 0; i < vect.size(); i++) // <-- iterator should be size_t type
cout << vect[i] << " ";
return 0;
}
如果您想传递对向量元素的引用,您也可以这样做,请注意,该元素必须已经存在:
void func(int *vect_elem) { //<-- pointer to int parameter
*vect_elem = 30; // <-- assign 30 to the vector element
}
int main() {
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(&vect[0]); //<-- reference an existing element of the vector
for (size_t i = 0; i<vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
在这种特殊情况下,您不需要指针,更好的选择是仅使用引用,就像已经提到的那样,因为您不需要任何取消引用:
void func(vector<int> &vect) { //<-- parameter reference
vect.push_back(30);
}
int main() {
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(vect); // <-- pass the vector
for (size_t i = 0; i < vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
void func(int &vect_elem) { //<-- parameter reference
vect_elem = 30;
}
int main() {
vector<int> vect;
vect.push_back(10);
vect.push_back(20);
func(vect[0]); //<-- pass the element
for (size_t i = 0; i<vect.size(); i++)
cout << vect[i] << " ";
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句