批量前移list中指定的元素

来源:互联网 发布:mac怎么压缩rar 编辑:程序博客网 时间:2024/05/16 18:35

批量选中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;}}


原创粉丝点击