想象现在服务器在向客户端发送数据,每隔几秒发送一次数据,客户端需要将前后两次的数据进行对比,找出相对于收的数据需要将上一次的数据删除的部分,以及此次新增加的,还有原来就已经存在的数据。
代码如下:
void getSameScreenGroupDatas()
{for(int i = 0; i < screenGroupVec.size(); ++i){for(int j = 0; j < lastScreenGroupVec.size(); ++j){if(screenGroupVec[i].at(0).sid == lastScreenGroupVec[j].at(0).sid){getNewWinOriginalWin(screenGroupVec[i],lastScreenGroupVec[j]);getDelWinDatas(screenGroupVec[i],lastScreenGroupVec[j]);break;}}}
}void getNewWinOriginalWin(winProList newDatas, winProList lastDatas)
{for(int i = 0; i < newDatas.size(); ++i){for(int j = 0; j < lastDatas.size(); ++j){if(newDatas[i].wid == lastDatas[j].wid)//原来存在的窗口{updateDatas.insert(newDatas[i].sid,newDatas[i]);break;}if(j == lastDatas.size()-1){if(newDatas[i].wid != lastDatas[j].wid){//新增加的窗口addWinDatas.insert(newDatas[i].sid,newDatas[i]);}}}}
}void getDelWinDatas(winProList newDatas, winProList lastDatas)
{for(int i = 0; i < lastDatas.size(); ++i){for(int j = 0; j < newDatas.size(); ++j){if(newDatas[j].wid == lastDatas[i].wid){break;}if(j == newDatas.size()-1){if(newDatas[j].wid != lastDatas[i].wid){//需要删除的窗口delWinDatas.insert(lastDatas[i].sid,lastDatas[i]);}}}}
}
screenGroupVec为当前接收的,已经进行按照某一个结构体的字段归类的list类型的vector,lastScreenGroupVec为上一次接收的按照结构体的某一字段归类的list类型的vector.前后两组数据对比,通过先找出字段值相同的一组list,然后对比这组list中结构体的值是新增的还是待删除的,或者是原来存在的。
记录思路。