我想了解vector::pop_back()
的行为。所以我有以下代码片段:
vector<int> test;
test.push_back(1);
test.pop_back();
cout << test.front() << endl;
也许这是对的,但令我惊讶的是它打印出来1.所以我很困惑。 pop_back()
仅能删除元素index > 0
吗?
提前致谢!
答案 0 :(得分:18)
通过在空向量上调用front
来调用未定义的行为。这就像索引一个数组的边界。任何事情都可能发生,包括返回1
。
答案 1 :(得分:10)
pop_back
这里将向量留空。访问空向量的front()
是未定义的行为。这意味着任何事情都可能发生 - 没有预测到什么。它可能会崩溃,它可以返回1,它可以返回42,它可以打印“Hello,world!”,它可以擦除你的硬盘,或者它可以summon demons through your nasal passages。对于C ++而言,这些都是可以接受的行为 - 这里刚刚发生以最终返回1
。不要依赖它。