首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ list,该如何解决

2013-07-16 
C++ list声明变量listg_t_human male其中g_t_human为结构体运行函数SetRandomFemaleInfo(male,100)//

C++ list
声明变量list<g_t_human> male;其中g_t_human为结构体
运行函数SetRandomFemaleInfo(male,100);//为male添加100组g_t_human数据,返回值为male
问题:发现male没有任何数据;如果male=SetRandomFemaleInfo(male,100);则发现male中100组数据全相同(实际是不同的)
求助???????????? C++ Structure list
[解决办法]
SetRandomFemaleInfo的参数是值传递,函数内修改不会影响外面的list,返回值是修改后的list所以赋值的话能修改

每行都进行srand( (unsigned)time( NULL ) );是多余的,实际上每次重置种子反而会造成种子相同,导致随机数变成固定值
去掉所有的srand,把srand放程序吧
[解决办法]
1:list这种大数据量的类型不要以值拷贝的方式传递和返回
2:加入到list中的东西会被复制一份,你new出来的对象不会有机会释放了,这是严重的内存泄露。
3:srand(time(NULL))应该只在main函数的开始时调用一次,计算机的计算速度是很快的,你调用这么多次srand(time(NULL)),结果time返回的值很可能都相同,于是你每次调用rand之前都把随机种子设为了同一个值,结果自然相同。


list<g_t_human> &SetRandomFemaleInfo(list<g_t_human> &female,int num)
{
    for(int i=0; i<num; i++)
    {
        g_t_human temp;//中间变量;
        temp.i_Id=i;
        temp.m_iSex=0;
        temp.m_dLook=rand()%100;
        temp.m_dWealth=rand()%100;
        temp.m_dPersonality=rand()%100;
        temp.m_dOppLook=rand()%98;
        temp.m_dOppWealth=rand()%(99-temp.m_dOppLook);
        temp.m_dOppPersonality=100-temp.m_dOppLook-temp.m_dOppWealth;
        temp.m_iAttention=0;
        female.push_back(temp);
    }
    return female;
}

调用时只需要SetRandomFemaleInfo(male,100);就行了,不需要赋值。

热点排行