There are two vectors std :: vector and QVector . We need to check how to "shift" the elements when pasting. (I built two vectors with five elements and inserted the zero element) I have this code:
#include <QVector> #include <QTextStream> struct MoveTest { int i; MoveTest() {} MoveTest(const MoveTest& other) {QTextStream(stdout) << "constr copy" << endl;} MoveTest(MoveTest &&other) {QTextStream(stdout) << "constr move" << endl;} ~MoveTest() {} inline MoveTest& operator= (const MoveTest& other) {QTextStream(stdout) << "copy" << endl;} inline MoveTest& operator= (MoveTest &&other) {QTextStream(stdout) << "move" << endl;} }; int main(int argc, char *argv[]) { QTextStream(stdout) << "std::move:" << endl; MoveTest t1; MoveTest t2(std::move(t1)); t1 = std::move(t2); QTextStream(stdout) << "QVector:" << endl; QVector<MoveTest> qmTest(5); qmTest.insert(qmTest.begin(), MoveTest()); QTextStream(stdout) << "std::vector:" << endl; std::vector<MoveTest> mTest(5); mTest.insert(mTest.begin(), MoveTest()); return 0; }
My conclusion with gcc 4.7.2, QMAKE_CXXFLAGS + = -std = C ++ 0x:
std::move: constr move move QVector: constr copy constr copy constr copy constr copy constr copy constr copy copy copy copy copy copy copy std::vector: constr move constr copy constr copy constr copy constr copy constr copy
How to paste elements with internal offset without copying? What GCC flags are needed?
user1931823
source share