我确实在网上对此进行了很好的搜索,并找到了很多有关向量的帮助,但实际上并没有在STL列表上提供任何帮助。我正在尝试从地图中的列表中删除指针。 (有点棘手)。我真的很想使用指针,而不是还原到另一个(更糟糕的)服务器系统。我将显示代码

bool RoomDB::removePlayer( int socketid, int roomid )   {

list<GamePlayer>::iterator itit;

 for( itit == roomlist[roomid].playerlist.begin(); itit != itit.end(); itit++ ) {
    if( itit.socketno == socketid )
    itit.erase( itit );
}

最佳答案

我认为应该是这样的:

roomlist[roomid].playerlist.remove_if(
    [socketid](GamePlayer const & gp) { return gp.socketno == socketid; }
);


如果您没有lambda,则必须自己编写一些谓词,否则您将采用手动方式。但现在要注意循环:

for (std::list<GamePlayer>::iterator it = roomlist[roomid].playerlist.begin();
     it != roomlist[roomid].playerlist.end();  /* no increment */ )
{
   if (it->socketno == socketid)
   {
     it = roomlist[roomid].playerlist.erase(it);
   }
   else
   {
     ++it;
   }
}

10-06 05:24