Visual Studio 显示发现 0 个问题,但当程序启动时,会弹出一个选项卡,其中包含矢量库并指向第 2151 行,并显示“Project2.exe 中 0x00007FF90121CF19 处未处理的异常:Microsoft C++ 异常:内存位置的 std::out_of_range”
我编写了一个代码,检查向量位置 (k) 与下一个向量位置 (k + 1),如果它具有相同的数字,则删除位置 (k) 它应该在达到向量大小后停止检查和删除重复项,但我不断收到异常错误。我点击“继续”,它工作正常,但在每次“继续”后仍然显示异常错误。如何停止这种情况?
void removeDuplicates(vector<int>& nums) {
int k = 0;
while (k != nums.size() + 1) {
vector<int>::iterator iter = nums.begin() + k;
if (nums.at(k) == nums.at(k + 1)) {
nums.erase(iter);
}
++k;
}
}
我尝试点击“继续”,它工作正常,但在每次“继续”后仍然显示异常错误。 在代码中,我尝试删除“nums.begin()”旁边和“nums.at()”括号内的算术运算符,但没有帮助。
您肯定想检查
k < nums.size()
以保持在范围内。你可以检查 k != nums.size()
但你的循环可以做一些聪明的事情,比如将 k
增加一个比 1
更大的数字,然后直接跳过 nums.size()
。
但随后您使用
k + 1
进行索引,因此您可能需要 k < nums.size() - 1
作为您的条件。
我建议除非你绝对需要修改原始向量,否则你返回一个包含这些值的新向量。