summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qvector.h11
-rw-r--r--tests/auto/corelib/tools/qvector/tst_qvector.cpp8
2 files changed, 6 insertions, 13 deletions
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index e2cb7fbf23..b75c2975b6 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -581,14 +581,15 @@ typename QVector<T>::iterator QVector<T>::insert(iterator before, size_type n, c
template <typename T>
typename QVector<T>::iterator QVector<T>::erase(iterator abegin, iterator aend)
{
- if (abegin < d->begin())
- abegin = d->begin();
- if (aend > d->end())
- aend = d->end();
+ const int itemsToErase = aend - abegin;
+
+ if (!itemsToErase)
+ return abegin;
+ Q_ASSERT(abegin >= d->begin());
+ Q_ASSERT(aend <= d->end());
Q_ASSERT(abegin <= aend);
- const int itemsToErase = aend - abegin;
const int itemsUntouched = abegin - d->begin();
// FIXME we could do a proper realloc, which copy constructs only needed data.
diff --git a/tests/auto/corelib/tools/qvector/tst_qvector.cpp b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
index 56570b8e53..09d3051ca5 100644
--- a/tests/auto/corelib/tools/qvector/tst_qvector.cpp
+++ b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
@@ -796,16 +796,12 @@ void tst_QVector::eraseEmpty() const
{
{
QVector<T> v;
- v.erase(v.begin());
- QCOMPARE(v.size(), 0);
v.erase(v.begin(), v.end());
QCOMPARE(v.size(), 0);
}
{
QVector<T> v;
v.setSharable(false);
- v.erase(v.begin());
- QCOMPARE(v.size(), 0);
v.erase(v.begin(), v.end());
QCOMPARE(v.size(), 0);
}
@@ -836,8 +832,6 @@ void tst_QVector::eraseEmptyReserved() const
{
QVector<T> v;
v.reserve(10);
- v.erase(v.begin());
- QCOMPARE(v.size(), 0);
v.erase(v.begin(), v.end());
QCOMPARE(v.size(), 0);
}
@@ -845,8 +839,6 @@ void tst_QVector::eraseEmptyReserved() const
QVector<T> v;
v.reserve(10);
v.setSharable(false);
- v.erase(v.begin());
- QCOMPARE(v.size(), 0);
v.erase(v.begin(), v.end());
QCOMPARE(v.size(), 0);
}