开发者社区> 问答> 正文

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

展开
收起
a123456678 2016-03-06 12:00:34 6660 0
1 条回答
写回答
取消 提交回答
  • vec.push_back(arr);
    这里数据保存的是arr的内存地址,仅接着arr就被释放了。这时vec中存的数据是无效的,再从里面取数据是不正确的。
    可以将arr定义为结构体或者类
    如:
    class Num
    {
    int n1;
    int n2;
    };
    定义数组
    vector vec;
    当然也可以考虑在堆上申请内存再释放

    2019-07-17 18:54:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载