黑木爷 2015-05-31 02:10 采纳率: 0%
浏览 10828

关于C++ vector中存放数组,出现问题

我想定义一个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.
但是我不知道为什么会被覆盖,求解答

  • 写回答

6条回答 默认 最新

  • wlj1234 2015-05-31 04:02
    关注

    vec.push_back(arr);
    这里数据保存的是arr的内存地址,仅接着arr就被释放了。这时vec中存的数据是无效的,再从里面取数据是不正确的。
    可以将arr定义为结构体或者类
    如:
    class Num
    {
    int n1;
    int n2;
    };
    定义数组
    vector vec;
    当然也可以考虑在堆上申请内存再释放

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败