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;}