gpt4 book ai didi

c++ - 内部移动 std::vector 元素和 QVector

转载 作者:可可西里 更新时间:2023-11-01 18:36:04 24 4
gpt4 key购买 nike

有两个 vector std::vectorQVector。我们必须检查插入时如何“移动”元素。 (用五个元素构造两个 vector 并插入零元素)我有这段代码:

#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

如何在不复制的情况下插入具有内部移位的元素?需要哪些 GCcflags?

最佳答案

由于您的移动操作符可以抛出异常,std::vector 不能使用它。如果运算符(operator)在调整大小过程中途抛出异常,它会怎么做?声明它noexcept如果它不能抛出异常并且 vector 实现可以使用它。

关于c++ - 内部移动 std::vector 元素和 QVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14053348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com