为什么我不能修改通过引用传递的向量?

Why can't I modify a vector that I pass by reference?

本文关键字:向量 引用 不能 修改 为什么      更新时间:2023-10-16

这是我第一次尝试将按引用传递与向量一起使用。我以为我做对了,但我在试图分配a[0] = 5的行上error: no viable overloaded '='

void BubbleSort(vector<int> *a) {
    int n = a->size(), numberOfSwaps = 0;   
    if (n > 0)
        a[0]= 5;
}

int main(){
    // input size and array
    int n;
    cin >> n;
    vector<int> a(n);
    for(int a_i = 0;a_i < n;a_i++){
       cin >> a[a_i];
    }
    // sort
    BubbleSort(&a);
    // print
    for (auto i = a.begin(); i != a.end(); ++i)
        cout << *i << ' '; 
    return 0;
}

编辑:

所以现在我已经被告知我实际上是通过指针传递的,我的问题是,我应该通过引用还是指针传递向量,还是无关紧要?

vector<int> *不是引用。 vector<int> *是一个指针。

更改函数以将引用作为参数,或使用 (*a)[0]=5。

但是,在修复此程序以使其编译后,当您运行它时,由于访问矢量中不存在的内容而导致未定义的行为,它将立即崩溃。在此代码中,您还有其他多个 bug 需要修复。

你不是通过引用传递,而是在传递指针。您需要先取消引用指针,然后才能访问运算符 []。

(*a)[0] = 5;