读书人

C++ list,该如何解决

发布时间: 2013-07-16 22:38:05 作者: rapoo

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);就行了,不需要赋值。

读书人网 >C++

热点推荐