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;
}