在 C++ 中取消对 int 和 int& 的迭代器的引用

Deb*_*Deb 0 c++

int main()
{
vector<int> v={1,2,4};
int &a=*v.begin();
cout<<a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

v.begin()在上面的代码段中,分配给 的迭代器的取消引用值&a。打印a显示 1

int main()
{
vector<int> v={1,2,4};
int a=*v.begin();
cout<<a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里,迭代器被引用,并且值被分配给a(不带 &)。打印a仍然显示 1。

我仍在学习 C++,我不明白为什么第一个代码块有效。意味着什么int &a

Ted*_*gmo 5

int& a = *v.begin();引用a向量中的第一个元素,因此您对该引用所做的任何操作都会反映在引用的元素上。例子:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 4};
    int &a = *v.begin();
    a = 100;
    std::cout << v[0]; // prints 100
}
Run Code Online (Sandbox Code Playgroud)

相反,如果您将int a = *v.begin();所持有的价值复制到和v[0]中,并过着各自的生活:av[0]a

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 4};
    int a = *v.begin();
    a = 100;
    std::cout << v[0]; // prints 1
}
Run Code Online (Sandbox Code Playgroud)