对c++的pop_back()感到困惑
Confused about pop_back(), C++
我试图理解vector::pop_back()
的行为。所以我有下面的代码片段:
vector<int> test;
test.push_back(1);
test.pop_back();
cout << test.front() << endl;
也许它是对的,但是让我惊讶的是它打印出1。所以我很困惑。pop_back()
只能够除去含有index > 0
的元素吗?
提前感谢!
您通过在空向量上调用front
来调用未定义的行为。这就像索引超出了数组的边界。任何事情都可能发生,包括返回1
。
pop_back
在这里使向量为空。访问空向量的front()
是未定义行为。这意味着任何事情都有可能发生——没有预测什么。它可能崩溃,它可能返回1,它可能返回42,它可能打印"Hello, world!",它可以擦除你的硬盘,或者它可以通过你的鼻腔召唤恶魔。这些都是可以接受的行为,就c++而言——这里只是发生了最终返回1
。不要依赖它
相关文章:
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- 列表大小为 1,但 front() 和 back() 不相等
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- 链表回推操作中需要'back pointer'
- 为什么 std::string 的 back() 应该返回对字符的引用?
- VC++ 自动说明符假定矢量的引用限定符<bool>::back的引用限定符
- C: strtok value gives back null
- vector.back() 可以用来为向量的最后一个元素赋值吗?
- 在std::vector中实现back()
- 在push_front属性上有点混淆.intlist.push_front(2 * intlist.back())会做些
- 将对象转换为 char,然后"uncasting it back"
- std::vector back()的奇怪行为