2つのベクトルstd :: vector
とがありQVector
ます。挿入時に要素がどのように「シフト」するかを確認する必要があります。(5つの要素で2つのベクトルを構築し、ゼロ要素を挿入します)私はこのコードを持っています:
#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;
}
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
コピーせずに内部シフトのある要素を挿入するにはどうすればよいですか?どのGCCフラグが必要ですか?