C++ Vector 赋值时下标超出范围

C++ Vector subscript out of range when assigning values

我正在制作一个简单的算法,计算每个数字在向量中出现的次数。但是,在编译时它在弹出窗口中给出了以下错误:Vector subscript out of range and it is referenced to:

File: C:\Program Files\Microsoft Visual Studio22\Community\VC\Tools\MSVC.31.31103\include\vector

Line: 1463

代码:

//get if highest value is negative
if (mx < 0) {
//store number of invidiual values in array invert, mn value
    std::vector<int> vl(mn * -1);
    for (int x = 0; x < arr.size(); x++) {
        vl[arr[x] * -1] += 1;
    }

这里我使用的是负值,因此我将它们反转为正值。 Mn 代表向量中的最低值,然后将其反转使其成为最高值,根据创建另一个向量 Vl,其中存储每个值的编号,因此其大小为 mn * -1.

全功能:

void topSort(std::vector<int> &arr) {

//stores highest value
int mx = arr[0];
//stores lowest value
int mn = arr[0];

//get highest value
for (int i = 1; i < arr.size(); i++) {
    if (arr[i] > mx) {
        mx = arr[i];
    }
    if (arr[i] < mn) {
        mn = arr[i];
    }
}
//get if highest value is negative
if (mx < 0) {
    //store number of invidiual values in array invert mx value
    std::vector<int> vl(mn * -1);
    for (int x = 0; x < arr.size(); x++) {
        vl[arr[x] * -1] += 1;
    }
    for (auto z : vl) {
        std::cout << z << "\n";
    }
} else {
    //store number of invidiual values in array
    std::vector<int> vl(mx);
}
}

在输入 [-3, -2, -1] 时,您的程序将:

  1. 设置mx=-1.
  2. 设置mn=-3.
  3. 创建大小为 3 的向量 vl,因此位置为 vl[0]vl[1]vl[2]
  4. 尝试设置 vl[3] += 1,这会引发您看到的错误,因为 vl[3] 不存在。

您应该 std::vector<int> vl(mn * -1 + 1); 以避免 out-of-range 异常。