删除 vector 中引用指向的元素,会有什么结果?

发布时间 2023-05-07 23:20:16作者: Revc
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> arr = {1, 2, 3};
    const int &a = arr[0];
    std::cout << a << '\n';
    arr.erase(arr.begin());
    std::cout << a << '\n';
	return 0;
}

运行上面的代码,输出的结果是

1
2

Q

我们没有通过任何方式修改引用 a 指向的元素,为什么最后输出的结果发生了变化?

A

a 指向 arr 的第一个元素 arr[0] = 1
我们通过 arr.erase(arr.begin()) 移除了第一个元素,现在 arr[0] = 2
这里我们需要注意,aarr[0] 的别名,而不是 1 的别名。arr[0] 发生了变化,所以 a 也随之发生变化。