我不确定此代码有什么问题:
std::vector<int> myVector(0);
if (myVector.back() == 12)
myVector.push_back(12);
似乎在空向量上调用back()会使程序崩溃。
我不明白它为什么会崩溃?在调用back()
之前,我们是否需要检查向量的长度?或者它可能是一个错误?
文档说,如果向量为空,则返回未定义的值。
答案 0 :(得分:13)
在调用back()之前我们需要检查向量的长度吗?
总之:是的。这是你的错误,你的向量是空的,所以没有“后退”元素。
文档应该说(如果它说的话),在空向量上调用back()
会导致未定义的行为,而不是它返回一个未定义的值。
答案 1 :(得分:6)
c ++ 11标准告诉我们:
23.3.2.8 / 3
为零大小的数组调用front()或back()的效果未定。
由于行为未定义,任何事情都可能发生。你很幸运遇到了崩溃。