c++ - 面临 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;
}**
解决方案
您正在创建一个整数的向量:
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);
推荐阅读
- sql - 使用“NOT IN”子句查询删除一个表中的记录,以检查多个表。这个查询可以更简化吗?
- python - Python Shapely - 检查线是否包含一个点
- django - 在模板中实现 Django admin TabularInline 表单
- reactjs - 如何从控制台日志显示数据到网站反应?
- debugging - 如何在 LLDB 中将表达式设置为观察点?
- javascript - ReactJS -> 我如何制作受限路线?
- python - 限制用户更新模型表单
- java - 无法更新 doc 文件的语言 [JAVA]
- c# - C# - 在 Windows 服务中调用/实现 Rest Web 服务
- opengl - 在 OpenGL-OpenCL 纹理互操作中,PBO 如何从纹理中接收数据?