批量选中list列表中的元素,进行移位,可用于批量选中图层进行上下移动的操作。
//将list中指定的元素向前移动一位(由lstMove指定);
void moveItem(const std::list<int>& lstMove, std::list<int>& lstAll)
{
if (lstMove.empty()) return;
std::list<int>::const_iterator _lstMoveBegin = lstMove.begin();
std::list<int>::const_iterator _lstMoveEnd = lstMove.end();
//记录已处理的元素个数;
int iCount = 0;
int iSum = lstMove.size();
//指定元素在队首的无需移位;
std::list<int>::iterator itr = lstAll.begin();
for (;itr != lstAll.end();++itr)
{
if(_lstMoveEnd == std::find(_lstMoveBegin, _lstMoveEnd, *itr)) break;
if(++iCount == iSum) return;
}
//处理需要移位的元素;
//此时迭代器itr为第一个非指定元素;
std::list<int>::iterator itrMove = itr;
std::list<int>::iterator itrNext = ++itr;
for (;itrNext != lstAll.end(); itrMove = itrNext++)
{
if(_lstMoveEnd == std::find(_lstMoveBegin, _lstMoveEnd, *itrNext)) continue;
//交换元素值(迭代器不改变);
std::swap(*itrMove, *itrNext);
if(++iCount == iSum) return;
}
}