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

输出了一堆不值知道的未知值,这说明直接采用值传递的方式,不能带给实参值任何变化。

上一篇下一篇

猜你喜欢

热点阅读