【问题标题】:How to use a QVector?如何使用 QVector?
【发布时间】:2021-02-14 20:03:05
【问题描述】:

假设我有一个有以下成员的班级

QVector<bool> m_vector;

然后在构造函数上我可以做

m_vector.resize(SIZE);
for (int i = 0; i < SIZE; ++i)
    m_vector[i] = false;

或(更短)

m_vector = QVector(SIZE, false);

越短的方法越短越好?或者分配操作员告诉我有一个(不必要的)副本正在进行,我应该更喜欢非较短的方法?

【问题讨论】:

  • 我认为你在for循环中有错误,你可能想使用'm_vector[i] = false'
  • 不用了,谢谢兄弟!

标签: c++ qt


【解决方案1】:

任何一种方法都可以正常工作,但首选第二种/更短的方法,因为它需要的代码更少,因此出错的机会更少。至于性能,“不必要的副本”几乎肯定会被实现为构造和-move 而不是副本(因为QVector(SIZE, false) 是一个右值),这意味着它的效率并不比您的第一个示例低很多。特别是,SIZE 元素数组将从临时 QVector 对象中窃取,并交给 m_vector 采用,而不是被(创建、复制然后销毁)。

也就是说,最好的方法是在类构造函数的初始化列表中初始化 m_vector 对象,如下所示:

MyClass :: MyClass()
    : m_vector(SIZE, false)
{
}

...这样,调整大小/默认填充是作为m_vector 原始构造的一部分完成的,而不是作为之后的单独步骤。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多