From e3e4fe79100162a9fc47b923fe23d1a296cd67d1 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 25 Mar 2014 00:28:19 +0100 Subject: Use std::vector range ctor in QVector::toStdVector() There are three reasons to do so: 1. This could be more efficient, depending on the STL implementation. 2. By using QTypedArrayData iterators (T*) instead of QVector ones, we actually invoke the non-templated range ctor of std::vector, at least in the common case that std::vector::const_iterator is also const T*. 3. The change turns a former NRVO return into a RVO one, potentially allowing more compilers to perform the copy elision. Change-Id: I70b35aaeae70ba06a971a36b8b1b1da997e8094f Reviewed-by: Olivier Goffart --- src/corelib/tools/qvector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index f09f1a3c41..c92f43e1fc 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -256,7 +256,7 @@ public: static inline QVector fromStdVector(const std::vector &vector) { QVector tmp; tmp.reserve(int(vector.size())); std::copy(vector.begin(), vector.end(), std::back_inserter(tmp)); return tmp; } inline std::vector toStdVector() const - { std::vector tmp; tmp.reserve(size()); std::copy(constBegin(), constEnd(), std::back_inserter(tmp)); return tmp; } + { return std::vector(d->begin(), d->end()); } private: friend class QRegion; // Optimization for QRegion::rects() -- cgit v1.2.3