美文网首页
C++中的vector模板类作形参的小问题

C++中的vector模板类作形参的小问题

作者: Nise9s | 来源:发表于2018-10-08 19:54 被阅读0次

    学习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
    

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

    相关文章

      网友评论

          本文标题:C++中的vector模板类作形参的小问题

          本文链接:https://www.haomeiwen.com/subject/bmojaftx.html