所以我是C++的新手,我正在尝试做这个程序。程序的要点是:你输入一个数组,程序计算出哪个子数组的和是奇数的最大,并打印出该子数组有多少元素。
#include <iostream>
#include <vector>
using namespace std;
void swap(int *x,int *y){
int temp=*x;
*x=*y;
*y=temp;
}
void subarr(vector<int> arr,int start, int end){
vector<int> a;
vector<int> A;
int sum=0;
if(end==arr.size())
return;
else if(start>end)
subarr(arr,0, end+1);
else{
for(int i=start;i<end+1;i++){
sum+=arr[i];
}
int num_of_elements=(end+1)-start;
a.push_back(sum);
A.push_back(num_of_elements);
subarr(arr,start+1,end);
}
for(int j=100;j<a.size();j++){
if(a.at(j)%2!=0){
if(a.at(j)>a.at(0)){
swap(&a.at(j),&a.at(0));
swap(&A.at(j),&A.at(0));
}
}
else{
a.at(j)=-1;
}
}
cout<<A.at(0);
return;
}
int main(){
int elements;
cout<<"Enter number of elements: ";
cin>>elements;
int a[elements];
cout<<"Enter "<<elements<<" elements in an array: ";
for(int i=0;i<elements;i++){
cin>>a[i];
}
vector<int> arr;
for(int i=0;i<elements;i++){
arr.push_back(a[i]);
}
subarr(arr,0,0);
return 0;
}
它编译时不会出错。我运行它,它让我输入所有的输入,然后我得到以下消息:
引发“std::out_of_range"实例后调用的terminate what():vector::_m_range_check:__n(为0)&>this-&>size()(为0)
您的错误来自这一行:
cout<<A.at(0);
对于访问给定大小A以外的元素,您必须非常小心,因为您只能访问位置
请参见引发“std::out_of_range"实例后调用的terminate
也是为了这个:
for(int j=100;j<a.size();j++){
if(a.at(j)%2!=0){
确保您确实打算访问
要跟踪整个程序: