为什么我总是在内存位置 0x000000B70C8FF360 处收到 Microsoft C++ 异常:std::out_of_range。什么时候使用矢量?

问题描述 投票:0回答:1

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()”括号内的算术运算符,但没有帮助。

c++ exception memory vector
1个回答
0
投票

您肯定想检查

k < nums.size()
以保持在范围内。你可以检查
k != nums.size()
但你的循环可以做一些聪明的事情,比如将
k
增加一个比
1
更大的数字,然后直接跳过
nums.size()

但随后您使用

k + 1
进行索引,因此您可能需要
k < nums.size() - 1
作为您的条件。

我建议除非你绝对需要修改原始向量,否则你返回一个包含这些值的新向量。

© www.soinside.com 2019 - 2024. All rights reserved.