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]
时,您的程序将:
- 设置
mx=-1
.
- 设置
mn=-3
.
- 创建大小为
3
的向量 vl
,因此位置为 vl[0]
、vl[1]
和 vl[2]
。
- 尝试设置
vl[3] += 1
,这会引发您看到的错误,因为 vl[3]
不存在。
您应该 std::vector<int> vl(mn * -1 + 1);
以避免 out-of-range 异常。
我正在制作一个简单的算法,计算每个数字在向量中出现的次数。但是,在编译时它在弹出窗口中给出了以下错误: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]
时,您的程序将:
- 设置
mx=-1
. - 设置
mn=-3
. - 创建大小为
3
的向量vl
,因此位置为vl[0]
、vl[1]
和vl[2]
。 - 尝试设置
vl[3] += 1
,这会引发您看到的错误,因为vl[3]
不存在。
您应该 std::vector<int> vl(mn * -1 + 1);
以避免 out-of-range 异常。