首页 > 解决方案 > 面临 cpp 中排序功能的问题

问题描述

尝试对动态数组 sum_array 进行排序,但该函数不起作用。如果我不将数组的大小设置为 1,我的循环也会自动终止,我的声明可能有什么问题

**#include<bits/stdc++.h>
#include<algorithm>
#include<vector>

using namespace std;

int main(){

  vector <int> sum_array (1);
  int n;
  cin>>n;
  int sum,marks;
  for (int i = 0; i < 5; i++) {
    cout<<"turn now is ="<<i<<endl;
    sum=0;
    for (int k = 0; k < (n-1); k++) {
    cin>>marks;
    sum=sum+marks;
    cout<<"sum="<<sum<<endl;
    }
  sum_array[i]=sum;
  }
  for (int i = 0; i < 5; i++) {
    cout<<sum_array[i]<<endl;
  }
  sort(sum_array.begin(),sum_array.end());
  cout<<"after"<<endl;
  for (int i = 0; i < 5; i++) {
    cout<<sum_array[i]<<endl;
  }
    return 0;
}**

标签: c++sorting

解决方案


您正在创建一个整数的向量:

std::vector<int> sum_array(1);

然后您访问向量范围之外的元素(这是未定义的行为)。

for (int i = 0; i < 5; i++) {
  // ...
  sum_array[i] = sum;
}

std::sort只是对一个元素的向量进行排序,所以它没有做任何事情。

由于您不知道向量的大小,因此应将其初始化为空向量:

std::vector<int> sum_array;

并将元素推入sum_array

sum_array.push_back(sum);    

推荐阅读