如何解决尝试显示向量的元素时终止命令
所以我是 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,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);
return 0;
}
它编译没有错误。我运行它,它让我输入所有输入,但随后我收到以下消息:
在抛出 'std::out_of_range' 实例后调用终止 what(): vector::_M_range_check: __n (0) >= this->size() (0)
解决方法
您的错误来自这一行:
cout<<A.at(0);
访问 A 的给定大小之外的元素时必须小心。因为您只能访问位置 0
处的项目,因此向量中只有一个项目。
见terminate called after throwing an instance of 'std::out_of_range'
也为此:
for(int j=100;j<a.size();j++){
if(a.at(j)%2!=0){
确保您确实打算访问 a
的第 100 个元素。
跟踪程序:
- 它以
subarr(arr,0);
开头,然后向A
向量添加一些内容。 - 然后调用
subarry(arr,1,0)
,然后调用subarray(arr,1)
。 -
subarray(arr,1)
返回,跳回到subarray(arr,0)
的函数调用
- 您返回到未向
a
或A
添加任何内容的函数调用,跳过 for 循环,然后打印无效的A.at(0)
。立>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。