C++中的vector模板类作形参的小问题
2018-10-08 本文已影响0人
Nise9s
学习vector模板类时发现其作为形参有多种不同的形式,比如如下两种形式:
void function(vector<dtype> &vec);
void function(vector<dtype> vec);
两种形式的区别用两个例子给出,main函数部分如下:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <ctime>
using namespace std;
int main()
{
vector<int> p;
int a;
a=0;
for(int i=0;i < 10;i++)
p.push_back(a);
prtvector(p, 10);
for(int i=0; i<30 ;i++)
cout<< p[i] <<endl;
return 0;
}
考察void function(vector<dtype> &vec)的形式,即使用引用传递。定义一个函数如下:
void prtvector(vector<int> &p, int N)
{
for(int i=0;i < 20;i++)
p.push_back(i);
}
输出结果为
0
0
0
0
0
0
0
0
0
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
这种情况下,随着函数内形参的变化,实参会随着改变。使用指针传递也会有同样的效果,总之,实参会随着形参变化而变化。
考察void function(vector<dtype> vec),直接进行值传递,函数变为
void prtvector(vector<int> p, int N)
{
for(int i=0;i < 20;i++)
p.push_back(i);
}
输出结果为
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
134977
0
0
0
0
0
0
0
0
0
0
输出了一堆不值知道的未知值,这说明直接采用值传递的方式,不能带给实参值任何变化。