先考考大家,这两段代码一样吗?
vector<int> v;
int mem=0;
int create_node(){
v.push_back(0);
return ++mem;
}
int f(int a){
v[a]=create_node();
}
vector<int> v;
int mem=0;
int create_node(){
v.push_back(0);
return ++mem;
}
int f(int a){
int node=create_node();
v[a]=node;
}
答案是:不一样,后一个可以完成字面意思上的工作,前一个会有bug
理由:
v[a]=create_node();
这样的语句是错的
c++的视角:
问题是,create_node 会 push_back 一个元素,这可能导致 vector 的扩容,之前返回的引用失效
出处:https://www.luogu.com.cn/discuss/553366?page=2