为什么push_back后会出错

why does it go wrong after push_back?

本文关键字:出错 back push 为什么      更新时间:2023-10-16

这里的代码很简单:

int main() {
    vector<string> v;
    v.push_back("hello");
    string& x = v[0];
    v.push_back("world");
    cout << x << endl;
    return 0;
}

为什么会出现运行时错误?请详细解释。

通读参考资料:std::vector::push_back .具体来说,说:

如果新size()大于 capacity()则所有迭代器和引用(包括过去结束迭代器(都将失效。否则,只有过去结束迭代器失效。

当您将第二个字符串推回向量时,它似乎必须重新分配内存,因为没有足够的容量来容纳第二个字符串。这种重新分配将整个矢量数据移动到内存中的其他位置 - 包括您推送到其中的第一个字符串。因此,对第一个字符串的引用变成了悬而未决的引用,取消引用它具有未定义的行为。