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

c – 内部移动std :: vector元素和QVector,第1张

概述有两个向量std :: vector和QVector.我们必须检查插入时“移位”元素的方式. (用五个元素构造两个向量并插入零元素)我有这个代码: #include <QVector>#include <QTextStream>struct MoveTest{ int i; MoveTest() {} MoveTest( 有两个向量std :: vector和QVector.我们必须检查插入时“移位”元素的方式. (用五个元素构造两个向量并插入零元素)我有这个代码:
#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 movemoveQVector:constr copyconstr copyconstr copyconstr copyconstr copyconstr copycopycopycopycopycopycopystd::vector:constr moveconstr copyconstr copyconstr copyconstr copyconstr copy

如何在不复制的情况下插入具有内部移位的元素?需要什么GCC标志?

解决方法 由于您的move运算符可以抛出异常,因此std :: vector无法使用它.如果运算符在调整大小过程中途抛出异常,它会怎么做?如果它不能抛出异常并且向量实现可以使用它,则声明它为 noexcept. 总结

以上是内存溢出为你收集整理的c – 内部移动std :: vector元素和QVector全部内容,希望文章能够帮你解决c – 内部移动std :: vector元素和QVector所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存