如何在函数中传递时更新矢量?

时间:2015-11-20 20:29:01

标签: c++ vector

当我有这段代码时:

int push666 (vector<int> vect){

    vect.push_back(666);
}

int main()
{

    vector<int> a;
    a.reserve(1);
    push666(a);

    cout << a[0];

    return 0;
}

cout只会打印出一些垃圾值。似乎函数对向量没有持久影响。我该怎么办呢?

3 个答案:

答案 0 :(得分:3)

您通过引用而不是值传递向量。

int push666 (vector<int>& vect){  
                    // ^^^  
    vect.push_back(666);
}

答案 1 :(得分:3)

C ++支持通过引用传递。

在您的代码中,std::vector<int>会按价值传递给函数 - 它会被复制并且此副本会被修改并std::vector<int>::push_back

为了防止复制 1 ,所以该函数直接在a上运行,您需要通过引用传递

int push666 (vector<int>& vect){
    vect.push_back(666);
}


另一方面,C方式(或糟糕的C ++方式)是传递指针:

int push666 (vector<int>* vect){
    vect->push_back(666);
}

请注意,指针在此处按值传递

1 标准没有指定,但引用可能是用指针实现的,因此技术上某些复制

答案 2 :(得分:1)

您应该通过引用传递它:

int push666 (vector<int>& vect){

    vect.push_back(666);
}

或指针不太常见:

int push666 (vector<int>* vect){

    vect->push_back(666);
}
push666(&a); // use & to take address of a

两种方式都允许您修改传递给函数的参数