【发布时间】:2021-04-02 23:14:11
【问题描述】:
所以我是 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' 的实例后调用终止 what(): vector::_M_range_check: __n (0) >= this->size() (0)
【问题讨论】:
-
*x,*y;在交换函数中应该是*x = *y;。 -
@Krishna Kanth Yenumula 仍然无法正常工作,出现同样的错误
-
为什么要设置参数 Start 和 End ?虽然你可以从 arr.size()
-
@JaziriRami 这对我来说更简单,这可能是导致错误的原因吗?
-
请不要修复您问题中的代码。修复是为了答案。我回滚了您的编辑,因为更新后一半的答案毫无意义
标签: c++ vector stdvector terminate