c++ - 从向量中删除元素时出现未处理的异常
问题描述
我试图找到两个向量的交集。我使用了两个循环,如果第一个循环元素等于第二个循环元素,我将该元素推入向量中,然后删除该元素。但我不断收到错误“未处理的异常”。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
void intersect(vector<int>& nums1, vector<int>& nums2)
{
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
vector<int>v;
if (nums1.size() > nums2.size())
{
for (int i = 0; i < nums1.size(); i++)
{
int first = nums1[i];
for (int j = 0; j < nums2.size(); j++)
{
if (first == nums2[j])
{
v.push_back(first);
nums2.erase(nums2.begin() + i); //Getting an error here
}
}
}
}
for (int i = 0; v.size(); i++)
cout << v[i] << " ";
}
int main()
{
vector<int>nums1 = { 1,2,2,1 };
vector<int>nums2 = { 2,2 };
intersect(nums1, nums2);
return 0;
}
解决方案
第一次调用给你错误的代码i
是 2。因为nums2.begin()
第一个元素nums2.begin() + 2
是迭代器,所以是第三个元素的迭代器。但nums2
没有第三要素。所以你正在尝试erase
一个不存在的元素。
推荐阅读
- unity3d - 在 HDRP 上使用感知相机时出现 Unity 错误
- rust - Rust 生命周期背后的直觉是什么?
- visual-studio - Active Directory 帐户一直被锁定
- android - 滚动时 LazyColumn 不保持项目的状态
- math - 甜甜圈图:计算外圆的坐标以获得切片之间的平行间隙
- python - 从 txt/csv 文件 (Python) 中的两个值计算百分比增长
- sqlite - 如何在 SQLite 表中存储 ZXing.Result 类型的类?
- javascript - 运行 npm 脚本时如何在标准输出中禁用纱线错误日志
- javascript - 邀请排行榜发送多条消息
- javascript - 标签上的 JavaScript 函数无需调用即可执行,甚至我应用了 onClick 事件侦听器