vector和数组不一样
数组本身和指针差不多,所以传进去的就是一个指针。
但是vector并不如此
1、 vector
vector传参的三种方式:
void func1(vector vet); //传送数值
void func2(vector &vet); //引用
void func3(vector *vet); //指针
这三种方式产生的效果:
调用拷贝构造函数,形参改变不会影响到实参
不调用拷贝构函数,形参改变影响到实参
不调用拷贝构函数,形参改变影响到实参
样例代码
void func1(vector<int> vet)
{
vet.emplace_back(1);
}
void func2(vector<int> &vet)
{
vet.emplace_back(2);
}
void func3(vector<int> *vet)
{
vet->emplace_back(3); //指针用 ->
}
int main()
{
vector<int> vet;
func1(vet);
cout << vet[0] << endl; //!!!报错,因为实参不会改变(想正常运行可注释掉这句)
vector<int> vet2;
func2(vet2);
cout << vet2[0] << endl; //输出 2
vector<int> vet3;
func3(&vet3); //这里取得是指针
cout << vet3[0] << endl; //输出 3
//system("pause");
return 0;
}
总结
vector最好采用引用或者指针的传参。
因为如果数据量大的时候,拷贝会非常的慢;
如果只是不想让数据被修改,可以在vector前加上 const。
2、数组
c++
中可以通过指定不带索引的数组名来传递一个指向数组的指针。
c++
传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。
int a[N];
void fun1(int *a, int size) // 形式参数是一个指针
void fun1(int a[], int size) // 形式参数是一个未定义大小的数组
void fun1(int a[N], int size) // 形式参数是一个已定义大小的数组
// 将数组名传入函数的同时,把数组的大小也作为参数传入 size = sizeof a