读书人

看个有关问题

发布时间: 2012-04-16 16:20:04 作者: rapoo

求助看个问题
struct Maixu
{
int sid; //id
std::list<int> userlist: //队列
int validTime; //预定时间,每个结构不一样,平均5分钟左右,以秒为单位
int leftTime; //剩余时间,以秒为单位
};

其中队列userlist中每一项都在预定的时间validTime后出队,比如当前队列是{1,2,3},validTime是5秒,则5秒后1出列,队列变为{2,3},再过5秒2出队,队列变为{3},相应的实现代码如下:

std::vector<Maixu> m_maixus; /*这个vector长度最多可以达到100000*/

void Timer() //Timer函数每秒运行一次
{
for(std::vector<Maixu>::iterator it = m_maixus.begin();
it !=m_maixus.end();++it)
{
if(it->userlist.empty())
continue;
if(--it->leftTime == 0)
{
//时间到
it->userlist.pop_front();
it->leftTime = it->validTime;
//其他操作
}
}
}

请问上面的实现方式有没有什么问题?如何改进?请提出你的改进方案并重写上面的代码段。


[解决办法]

if(--it->leftTime == 0)
{
//时间到
it->userlist.pop_front();
it->leftTime = it->validTime;
//其他操作
}
这里只对时间到了做了处理,如果时间还没到,出队伍操作没有啊

[解决办法]
建议把代码实现目的写出来,这样会更加明了
[解决办法]
pop_front之后迭代器失效了把,要重新赋值


[解决办法]
if(it->userlist.empty())
continue;
队列为空应直接结束吧,为什么还要继续循环呢
[解决办法]

探讨

if(it->userlist.empty())
continue;
队列为空应直接结束吧,为什么还要继续循环呢

[解决办法]
探讨

没太看明白意思,是说有些元素timeout了,并且list为空了,那么就依次放在最后、次后..
一旦循环看到timeout为0,list空的就break省点时间?

一个轮询过程,list应该会再修改,而不是一开始就固定了的。

PS.多玩YY怎么进啊,投过几次简历理都不理,是不是学历要求很高?

读书人网 >C++

热点推荐