erase的使用

来源:互联网 发布:sql 列别名 编辑:程序博客网 时间:2024/05/21 23:56
template <class _InputIter, class _OutputIter>inline _OutputIter copy(_InputIter __first, _InputIter __last,                        _OutputIter __result) {  __STL_REQUIRES(_InputIter, _InputIterator);  __STL_REQUIRES(_OutputIter, _OutputIterator);  return __copy_aux(__first, __last, __result, __VALUE_TYPE(__first));}template <class _InputIter, class _OutputIter, class _Tp>inline _OutputIter __copy_aux(_InputIter __first, _InputIter __last,                              _OutputIter __result, _Tp*) {  typedef typename __type_traits<_Tp>::has_trivial_assignment_operator          _Trivial;  return __copy_aux2(__first, __last, __result, _Trivial());}template <class _Tp>inline _Tp* __copy_aux2(const _Tp* __first, const _Tp* __last, _Tp* __result,                        __true_type) {  return __copy_trivial(__first, __last, __result);}template <class _Tp>inline _Tp*__copy_trivial(const _Tp* __first, const _Tp* __last, _Tp* __result) {  memmove(__result, __first, sizeof(_Tp) * (__last - __first));  return __result + (__last - __first);}memmove: Moves one buffer to another.void *memmove(   void *dest,   const void *src,   size_t count );
  iterator erase(iterator __position) {    if (__position + 1 != end())      copy(__position + 1, _M_finish, __position);    --_M_finish;    destroy(_M_finish);    return __position;  }
std::vector<int> col; for(int i=0;i<10;i++) {  col.push_back(i); } std::vector<int>::iterator iter=col.begin(); for(;iter!=col.end();iter++) {  if(*iter==2)  {   col.erase(iter);  }  cout<<*iter<<endl; }  iter=col.begin(); for(;iter!=col.end();iter++) {  cout<<*iter<<endl; }
error : vector iterator not dereferenceable  指针没有被引用
改正如下:
std::vector<int> col;for(int i=0;i<10;i++){col.push_back(i);}std::vector<int>::iterator iter=col.begin();for(;iter!=col.end();iter++){if(*iter==2){iter=col.erase(iter);}cout<<*iter<<endl;}
std::vector<int> col;for(int i=0;i<10;i++){col.push_back(i);}std::vector<int>::iterator iter=col.begin();for(;iter!=col.end();iter++){if(*iter==2){col.erase(iter);}cout<<*iter<<endl;} iter=col.begin();for(;iter!=col.end();iter++){cout<<*iter<<endl;}