// 置顶
bool MoveTop(int nId)
{
if (nId == 0 || m_vcTaskList.size() == 1)
{
return false;
}
vector<TASKLIST *>::iterator iter = m_vcTaskList.begin() + nId;
vector<TASKLIST *>::iterator iter2 = m_vcTaskList.begin();
iter ++; //
m_vcTaskList.insert(iter2, *iter);
m_vcTaskList.erase(iter);
//swap(*iter, *iter2);
return true;
}
iter++ 的原因:
查看源码
iterator insert(iterator _P, const _Ty& _X = _Ty())
{size_type _O = _P - begin();
insert(_P, 1, _X);
return (begin() + _O); }
void insert(iterator _P, size_type _M, const _Ty& _X)
{if (_End - _Last < _M)
{size_type _N = size() + (_M < size() ? size() : _M);
iterator _S = allocator.allocate(_N, (void *)0);
iterator _Q = _Ucopy(_First, _P, _S);
_Ufill(_Q, _M, _X);
_Ucopy(_P, _Last, _Q + _M);
_Destroy(_First, _Last);
allocator.deallocate(_First, _End - _First);
_End = _S + _N;
_Last = _S + size() + _M;
_First = _S; }
else if (_Last - _P < _M)
{_Ucopy(_P, _Last, _P + _M);
_Ufill(_Last, _M - (_Last - _P), _X);
fill(_P, _Last, _X);
_Last += _M; }
else if (0 < _M)
{_Ucopy(_Last - _M, _Last, _Last);
copy_backward(_P, _Last - _M, _Last);
fill(_P, _P + _M, _X);
_Last += _M; }}
插入内部执行逻辑:
1、插入第一步在vector 最后分配一个元素空间。
2、将插入位置后的所有元素后移一位,这时原来的iter 指向了前一个元素,所以在插入前后移一位。
3、将插入元素复制到分配的空间中。
4、删除插入的元素。