为什么对std::vector::back()的调用会使我的程序崩溃



我不确定这个代码出了什么问题:

std::vector<int> myVector(0);
if (myVector.back() == 12)
    myVector.push_back(12);

似乎在空向量上调用back()会使程序崩溃。

我不明白它为什么会崩溃?在调用back()之前,我们需要检查向量的长度吗?或者可能是一个bug?

文档中说,如果向量为空,它将返回一个未定义的值。

在调用back()之前,我们需要检查向量的长度吗?

总之:是的。这是你的bug,你的向量是空的,所以没有"back"元素。

文档应该说明(如果它说了什么的话)在空向量上调用back()会导致未定义的行为,而不是返回未定义的值。

c++11标准告诉这一点:

23.3.2.8/3

对零大小数组调用front()或back()的效果是不确定的。

由于行为是不明确的,任何事情都可能发生。你很幸运撞了车。

最新更新