向量下标超出范围误差c
发布时间:2020-12-16 10:30:50 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个接受n个整数输入的程序,并找出在给定输入中出现最大次数的程序.我正在尝试运行t案例的程序. 为此,我实现了一种类似于算法的计数排序(可能有点过时),它计算输入中每??个数字的出现次数.如果有多个具有相同最大出现次数的数字,我需要返回其
我正在尝试编写一个接受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调整到需要的大小. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |