[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
g++ 3.0.4: std::vector<...>.erase (iterator): preconditions?
From: |
Peter Müller |
Subject: |
g++ 3.0.4: std::vector<...>.erase (iterator): preconditions? |
Date: |
Thu, 04 Apr 2002 01:18:39 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.7) Gecko/20011221 |
Hi,
#include <vector>
int main ()
{
std::vector<int> v;
v.erase (v.end ());
}
dumps core in g++ 3.0.4. IMHO erase (end ()) is perfectly legal and
may frequently occur. Furthermore v.erase(v.end ()) must be equivalent
to v.erase (v.end (), v.end ()).
From the header file I cannot
see this:
g++-v3/bits/stl_vector.h:
378 iterator erase(iterator __position) {
379 if (__position + 1 != end())
380 copy(__position + 1, end(), __position);
381 --_M_finish;
382 destroy(_M_finish);
383 return __position;
384 }
385 iterator erase(iterator __first, iterator __last) {
386 iterator __i(copy(__last, end(), __first));
387 destroy(__i, end());
388 _M_finish = _M_finish - (__last - __first);
389 return __first;
390 }
Any suggestions? All I could find about the preconditions of the
iterator argument was "v.begin () <= iterator <= v.end ()" in
some popular C++ textbook.
TIA
Peter
- g++ 3.0.4: std::vector<...>.erase (iterator): preconditions?,
Peter Müller <=