[英]vector subscript out of range error in c++
我正在嘗試編寫一個接受n個整數輸入的程序,並找出在給定輸入中出現最大次數的程序。 我正在嘗試運行t案例的程序。 為此,我實現了一種類似於算法的計數排序(可能有點過時),它計算輸入中每個數字的出現次數。 如果有多個具有相同最大出現次數的數字,我需要返回其中較小的數字。 為此,我實施了排序。
我面臨的問題是,每次我在Visual C ++上運行程序時,我都會收到一個錯誤,告訴“向量下標超出范圍”。 在Netbeans下,它產生的返回值為1並退出。 請幫我找到問題所在
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int findmax(vector<int> a, int n)
{
int i,ret;
ret = 0;
for ( i = 0; i <n; i++)
{
if (a[i] > ret) {
ret = a[i];
}
}
return ret;
}
int main() {
int i = 0, j = 0, k = 0, n,m,r1,r2;
vector<int> a;
int t;
vector<int> buff;
cin>>t;
while(t--) {
cin>>n;
a.clear();
buff.clear();
for ( i = 0; i < n; i++) {
cin>>a[i];
}
sort(a.begin(),a.end());
m = findmax(a,n);
for ( j = 0; j < m+1; j++) {
buff[a[j]] = buff[a[j]] + 1;
}
k = findmax(buff,m+1);
for ( i = 0; i < m+1; i++) {
if (buff[i] == k) {
r1 = i;
r2 = buff[i];
break;
}
}
cout<<r1<<" "<<r2<<endl;
}
return 0;
}
在a.clear()
,向量沒有任何成員,其大小為0。
添加對a.resize(n)
的調用以使其大小合適。 您還需要將buff
調整到需要的大小。
這條線是罪魁禍首:
cin>>a[i];
你必須使用push_back:
cin >> temp;
a.push_back(temp);
或者在之前調整大小(n):
cin>>n;
a.resize(n);
for ( i = 0; i < n; i++) {
cin>>a[i];
}
然后你應該通過引用傳遞你的矢量findmax
int findmax(vector<int> &a, int n)
...
這不是填充數組的方式。
cin>>a[i];
您需要使用push_back()
方法或預先分配適當的大小。
問題是你非法使用不存在的向量索引(你永遠不會向向量添加任何項)。 由於您知道尺寸,因此可以在清除尺寸后調整尺寸:
a.clear();
a.resize(n);
buff.clear();
buff.resize(n);
for ( i = 0; i < n; i++) {
cin>>a[i];
}
將超出范圍。 構造它時,矢量的大小為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.