为什么我不能修改通过引用传递的向量?
Why can't I modify a vector that I pass by reference?
这是我第一次尝试对向量使用按引用传递。我以为我做对了,但我在试图分配 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;
}
编辑:
既然我已经被告知我实际上是在通过指针传递,我的问题是,我应该通过引用还是通过指针传递向量,还是这无关紧要?
您不是在传递引用,而是在传递指针。在访问 operator [].
之前,您需要取消引用指针
(*a)[0] = 5;
vector<int> *
不是参考。 vector<int> *
是指针。
要么更改函数以将引用作为参数,要么使用 (*a)[0]=5。
但是,在您修复此程序使其编译后,当您 运行 它时,由于访问矢量的不存在的内容而导致未定义的行为,它会立即崩溃。在这段代码中,您还有其他多个错误需要修复。
这是我第一次尝试对向量使用按引用传递。我以为我做对了,但我在试图分配 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;
}
编辑:
既然我已经被告知我实际上是在通过指针传递,我的问题是,我应该通过引用还是通过指针传递向量,还是这无关紧要?
您不是在传递引用,而是在传递指针。在访问 operator [].
之前,您需要取消引用指针(*a)[0] = 5;
vector<int> *
不是参考。 vector<int> *
是指针。
要么更改函数以将引用作为参数,要么使用 (*a)[0]=5。
但是,在您修复此程序使其编译后,当您 运行 它时,由于访问矢量的不存在的内容而导致未定义的行为,它会立即崩溃。在这段代码中,您还有其他多个错误需要修复。