【问题标题】:Why can't I modify a vector that I pass by reference?为什么我不能修改通过引用传递的向量?
【发布时间】:2016-08-16 18:15:31
【问题描述】:

这是我第一次尝试通过向量传递引用。我以为我做对了,但我在尝试分配 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;
}

编辑:

既然我被告知我实际上是通过指针传递的,我的问题是,我应该通过引用还是通过指针传递向量,还是无关紧要?

【问题讨论】:

  • BubbleSort 中,您的参数a 的类型为vector&lt;int&gt;*,将其更改为vector&lt;int&gt;&amp; 或在使用operator[] 之前取消引用指针,如下所示:(*a)[0] = 5;

标签: c++ vector compiler-errors pass-by-reference


【解决方案1】:

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

(*a)[0] = 5;

【讨论】:

    【解决方案2】:

    vector&lt;int&gt; * 不是参考。 vector&lt;int&gt; * 是一个指针。

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

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

    【讨论】:

    • 是通过引用还是通过指针传递向量是首选方式?没关系,还是取决于使用情况?
    • 取决于使用情况。有时最好通过指针传递,有时通过引用传递。有时骑自行车更好,去某个地方时,有时最好骑公共汽车。
    • @Jake :您需要指向引用的指针的典型情况是您可以传递 nullptr 但不能传递 null 引用。
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多