diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/tools/qvector.h | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 9692477e18..c547cec7be 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -833,11 +833,13 @@ Q_OUTOFLINE_TEMPLATE QVector<T> QVector<T>::mid(int pos, int len) const break; } - QVector<T> copy; - copy.reserve(len); - for (int i = pos; i < pos + len; ++i) - copy += at(i); - return copy; + QVector<T> midResult; + midResult.reallocData(0, len); + T *srcFrom = d->begin() + pos; + T *srcTo = d->begin() + pos + len; + midResult.copyConstruct(srcFrom, srcTo, midResult.data()); + midResult.d->size = len; + return midResult; } template <typename T> |