vector v;
v.push_back(1);
v.push_back(v [0]);
如果第二个push_back触发了reallocation,则对v [0]的引用无效。为了解决这个问题,可以使用以下方法:
vector v;
v.push_back(1);
v.Reserve(v.size()1);
v.push_back(v [0]); 通过调用储备,我们明确请求足够的内存,确保在随后的插入过程中不会发生重新分配。[&& && && && &&&华,根据C标准的行为,关于元素引用的push_back并未明确定义为缺陷,即使它可能导致无效的引用。这是因为标准需要vector ::插入才能正常工作,即使插入改变了其他元素的位置。