这是我第一次尝试使用向量传递引用。我以为我做得不对,但我在试图分配error: no viable overloaded '='
的行上a[0] = 5
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;
}
编辑:
所以现在我被告知我实际上是通过指针传递的,我的问题是,我应该通过引用还是通过指针传递向量,还是无关紧要?
答案 0 :(得分:4)
vector<int> *
不是参考。 vector<int> *
是一个指针。
更改函数以将引用作为参数,或使用(* a)[0] = 5.
但是,在修复此程序以使其编译后,当您运行它时,由于访问不存在的向量内容而导致未定义的行为,它将立即崩溃。在此代码中,您还有其他多个要修复的错误。
答案 1 :(得分:2)
你没有通过引用传递,你传递了一个指针。在访问operator []之前,需要取消引用指针。
(*a)[0] = 5;