c++ - c ++如何在不改变end()的情况下擦除元素
问题描述
我试图按如下方式从向量中删除一个元素,但为什么第一个输出与第二个输出不同?有什么方法可以避免这种情况或有更好的方法来删除元素吗?
int main() {
vector<int> test = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << *test.end() << endl;
test.erase(test.begin() + 2);
cout << *test.end() << endl;
return 0;
}
解决方案
std::vector::end
将迭代器返回到最后一个元素之后的元素,对其取消引用会导致 UB,意味着一切皆有可能,只是没有意义。
返回指向容器最后一个元素之后的元素的迭代器。
该元素充当占位符;尝试访问它会导致未定义的行为。
您可能会使用std::vector::back
来获取最后一个元素;(最好提前检查是否vector
为空。)
int main() {
vector<int> test = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << test.back() << endl;
test.erase(test.begin() + 2);
cout << test.back() << endl;
return 0;
}
推荐阅读
- php - 会话值到数组
- python - 如何在 JSON 文件中按字母顺序按一个字符串对列表进行排序
- html - 如何解决具有背景 div 的 2 列布局中的高度自动问题
- python - 将 Selenium CSV 下载到 python 变量中
- python - 将高度作为值放入另一列
- c# - 在 C# 中使用 APNS 推送进行编码
- javascript - TypeError:无法读取未定义的属性“oldRole”
- angular - 返回成功的 Observable On Route Resolve Call Failure?
- python-3.x - 数据包生成脚本的优化
- machine-learning - 用于 MLP Keras 预测的循环程序