STL compatibility: erase() should take a const_iterator as argument

erase() takes a const_iterator as argument in std::vector. We should do
the same to facility better interoperatbility.

Fixes: QTBUG-81915
Change-Id: I60ffb0eb45955be8e3e6aeaa56998f7c668fed09
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Lars Knoll 2020-02-27 13:20:57 +01:00
parent 9f041c4f3b
commit c946b07d9c

View File

@ -371,8 +371,8 @@ public:
const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); } const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(end()); }
const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); } const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); }
iterator erase(iterator begin, iterator end); iterator erase(const_iterator begin, const_iterator end);
inline iterator erase(iterator pos) { return erase(pos, pos+1); } inline iterator erase(const_iterator pos) { return erase(pos, pos+1); }
// more Qt // more Qt
inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); } inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); }
@ -626,14 +626,13 @@ QVector<T>::emplace(int i, Args&&... args)
} }
template <typename T> template <typename T>
typename QVector<T>::iterator QVector<T>::erase(iterator abegin, iterator aend) typename QVector<T>::iterator QVector<T>::erase(const_iterator abegin, const_iterator aend)
{ {
Q_ASSERT_X(isValidIterator(const_iterator(abegin)), "QVector::erase", "The specified iterator argument 'abegin' is invalid"); Q_ASSERT_X(isValidIterator(abegin), "QVector::erase", "The specified iterator argument 'abegin' is invalid");
Q_ASSERT_X(isValidIterator(const_iterator(aend)), "QVector::erase", "The specified iterator argument 'aend' is invalid"); Q_ASSERT_X(isValidIterator(aend), "QVector::erase", "The specified iterator argument 'aend' is invalid");
Q_ASSERT(aend >= abegin); Q_ASSERT(aend >= abegin);
// d.begin() so we don't detach just yet int i = std::distance(d.constBegin(), abegin);
int i = std::distance(d.begin(), abegin);
int n = std::distance(abegin, aend); int n = std::distance(abegin, aend);
remove(i, n); remove(i, n);