我正在制作一個簡單的演算法來計算每個數字在向量中表示的次數。但是,在編譯時,它在彈出視窗中給了我以下錯誤: Vector subscript out of range并且它參考:
檔案:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\include\vector
線路: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);
}
}
uj5u.com熱心網友回復:
在 input[-3, -2, -1]
上,您的程式將:
- 設定
mx=-1
。 - 設定
mn=-3
。 - 創建一個
vl
大小為 的向量,因此3
具有位置vl[0]
和。vl[1]
vl[2]
- 嘗試設定
vl[3] = 1
,這會引發您看到的錯誤,因為vl[3]
不存在。
您應該std::vector<int> vl(mn * -1 1);
避免超出范圍的例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470842.html