这 std::map::at
功能返回对 std::vector
在给定索引。当您将其分配给非参考变量时,您将制作向量的副本。您执行的任何插入操作都将在矢量的副本上,该矢量在方法的末尾不在范围,而您的目标是您瞄准的矢量却快乐地坐在地图中,并且不受影响。
相反,如果您添加 &
, , 然后 vList
真正将成为存储在地图中的实际矢量的别名。现在,对 vList
真的是对地图元素制作的。如果愿意,可以将参考视为伪装的指针。在这种情况下,您会明确写
std::vector<Edge> *vList = &edgeList.at(v);
例如,不是
std::vector<Edge> *vList = new std::vector();
*vList = edgeList.at(v);
实际上,以下示例更清楚地证明了这一点:
using namespace std;
int i = 0;
int& get_i()
{
return i;
}
int main()
{
cout << "i = " << i << ", &i = " << &i << endl;
int j = get_i();
j++;
cout << "i = " << i << ", j = " << j << ", &j = " << &j << endl;
int& k = get_i();
k++;
cout << "i = " << i << ", k = " << k << ", &k = " << &k << endl;
return 0;
}