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

How can I make my vector update when passed in a function?

本文关键字:更新 何更新 函数      更新时间:2023-10-16

当我有这段代码时:

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只会打印出一些垃圾值。函数似乎对向量没有持久的影响。我该怎么办?

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

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

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标准没有规定,但引用可能是用指针实现的,因此从技术上讲,会进行一些复制。

您应该通过引用传递它:

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

这两种方法都允许您修改传递给函数

的参数