尝试显示向量的元素时终止获取命令 我是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; 无效交换(int*x,int*y){ int temp=*x; *x=*y; *y=温度; } 无效子雷达(矢量arr、整数起始、整数结束){ 载体a; 载体A; 整数和=0; 如果(end==arr.size()) 返回; else if(开始>结束) 子雷达(arr,0,end+1); 否则{ 对于(int i=start;i

尝试显示向量的元素时终止获取命令 我是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; 无效交换(int*x,int*y){ int temp=*x; *x=*y; *y=温度; } 无效子雷达(矢量arr、整数起始、整数结束){ 载体a; 载体A; 整数和=0; 如果(end==arr.size()) 返回; else if(开始>结束) 子雷达(arr,0,end+1); 否则{ 对于(int i=start;i,c++,vector,stdvector,terminate,C++,Vector,Stdvector,Terminate,您的错误来自以下行: cout<<A.at(0); 确保您确实打算访问a的第100个元素 要跟踪整个程序,请执行以下操作: 它以subar(arr,0,0);开始,然后向A向量添加一些内容 然后调用子数组(arr,1,0),然后调用子数组(arr,1,1) subarray(arr,1,1)返回,跳回到subarray(arr,1,0) 返回到函数调用,它没有向a或a添加任何内容,跳过for循环,然后转到printa.at(0),这是无效的 您的错误来自以下行: cout<

您的错误来自以下行:

cout<<A.at(0);
确保您确实打算访问
a
的第100个元素

要跟踪整个程序,请执行以下操作:

  • 它以
    subar(arr,0,0);
    开始,然后向
    A
    向量添加一些内容
  • 然后调用
    子数组(arr,1,0)
    ,然后调用
    子数组(arr,1,1)
  • subarray(arr,1,1)
    返回,跳回到
    subarray(arr,1,0)
  • 返回到函数调用,它没有向
    a
    a
    添加任何内容,跳过for循环,然后转到print
    a.at(0)
    ,这是无效的

    • 您的错误来自以下行:

      cout<<A.at(0);
      
      确保您确实打算访问
      a
      的第100个元素

      要跟踪整个程序,请执行以下操作:

      • 它以
        subar(arr,0,0);
        开始,然后向
        A
        向量添加一些内容
      • 然后调用
        子数组(arr,1,0)
        ,然后调用
        子数组(arr,1,1)
      • subarray(arr,1,1)
        返回,跳回到
        subarray(arr,1,0)
      • 返回到函数调用,它没有向
        a
        a
        添加任何内容,跳过for循环,然后转到print
        a.at(0)
        ,这是无效的

      *x,*y;
      在交换函数中应该是
      *x=*y;
      。@Krishna Kanth Yenumula仍然不工作,得到相同的错误为什么要将参数放在开始和结束位置?而您可以从arr.size()获得它@JaziriRami对我来说更简单,这可能是导致错误的原因吗?请不要修复你问题中的代码。修复是为了答案。我回滚了你的编辑,因为随着更新,答案的一半毫无意义
      *x,*y;
      在交换函数中应该是
      *x=*y;
      。@Krishna Kanth Yenumula仍然不起作用,getting相同的错误为什么要设置参数开始和结束?而您可以从arr.size()获取参数@JaziriRami对我来说更简单,这可能是导致错误的原因吗?请不要修复你问题中的代码。修复是为了答案。我回滚了你的编辑,因为随着更新,答案的一半是无意义的。我更改为int j=0,这显然是我的错误,但显然我没有在数组中放入任何元素,即使是你我是用推的_back@bb_823因为
      subar(arr,0,end+1)使用start
      1
      和end
      0
      调用
      ,然后返回。因此,在第一个if语句块中,没有向A添加任何内容。确实向A添加了一些内容,但在上一个堆栈中,当您递归调用函数时,A将初始化为新值w。因此,从技术上讲,我的代码存在根本性缺陷,我应该这样做吗方法是:用void subar(vector arr,int start,int end,vector a,vector a)代替当前的subar函数。我将在主函数中声明vector a和vector afunction@bb_823我建议您避免使用递归(在其内部调用相同的函数),并利用for循环在数组的不同长度上循环。如果您能胜任,您可以研究函数,例如
      acculate
      和迭代器,例如
      int sum=std::acculate(v.begin(),v.end(),0)
      。慢慢来,边走边学习,然后你就可以为另一个特定问题打开另一个问题了。希望helps I改为int j=0,这显然是我的错误,但显然我没有在数组中放置任何元素,即使我使用了push_back@bb_823因为
      subar(arr,0,end+1)使用start
      1
      和end
      0
      调用
      ,然后返回。因此,在第一个if语句块中,没有向A添加任何内容。确实向A添加了一些内容,但在上一个堆栈中,当您递归调用函数时,A将初始化为新值w。因此,从技术上讲,我的代码存在根本性缺陷,我应该这样做吗方法是:用void subar(vector arr,int start,int end,vector a,vector a)代替当前的subar函数。我将在主函数中声明vector a和vector afunction@bb_823我建议您避免使用递归(在其内部调用相同的函数),并利用for循环在数组的不同长度上循环。如果您能胜任,您可以研究函数,例如
      acculate
      和迭代器,例如
      int sum=std::acculate(v.begin(),v.end(),0)
      。慢慢来,边走边学,然后你就可以为另一个特定问题提出另一个问题。希望这能有所帮助