我想定义一个vector,里面放几个数组,每个数组长度为2,数组的值由控制台输入。
先定义两个整数M,N,N表示vector中数组的数目,M是另外一个整数,答主可以不必关心。
当M=N=-1时跳出循环。整数J,F是存储在数组中的值,也由控制台输入。
然后对vector排序,排序规则定义在cmp函数中,按照J/F的值由大到小排序。
比如:对于{[7,2],[4,3],[5,2]},排序后为{[7,2],[5,2],[4,3]}
代码如下:
#include
#include
#include
using namespace std;
bool cmp(int a[],int b[]){
double k1=(double)(a[0]/a[1]);
double k2=(double)(b[0]/b[1]);
return k1<k2;
}
int main()
{
int M,N;
while(true){
cin>>M;
cin>>N;
if(M==-1 && N==-1)
break;
vector vec;
int arr[2]={};
for(int i=0;i int J,F;
cin>>J;
cin>>F;
arr[0]=J;
arr[1]=F;
vec.push_back(arr);
}
sort(vec.begin(),vec.end(),cmp);
int b[2]={};
memcpy(b,vec.at(0),2);
cout<<b[0]<<endl;
}
return 0;
}
最后输出第一个数组的第一个数时发现不是7,而是5.经过调试发现,当输入7,2时,vector中为[7,2],继续输入[4,3]时,vector中为[4,3],[4,3],也就是第一个数组被覆盖了,继续输入
[5,2]vector中都变成了[5,2],也就是都被[5,2]覆盖了,最后排序完了输出的自然是5.
但是我不知道为什么会被覆盖,求解答
vec.push_back(arr);
这里数据保存的是arr的内存地址,仅接着arr就被释放了。这时vec中存的数据是无效的,再从里面取数据是不正确的。
可以将arr定义为结构体或者类
如:
class Num
{
int n1;
int n2;
};
定义数组
vector vec;
当然也可以考虑在堆上申请内存再释放
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。