QVector数据清理和内存清理

原因

在处理大数据时,发现QVector直接用clear后台查看程序所占用的内存并没有下降

QVector数据清理

QVector<int>example_vec;
example_vec.clear();

QVector内存清理

QVector<int>example_vec;
example_vec.shrink_to_fit(); //程序运行到此处时内存才被降下去

QVector另外一种清空方式

QVector().swap(a):清空一个 QVector 对象 a 的内容

  • 具体解释:QVector 是 Qt 框架提供的一个动态数组容器类,用于存储和操作元素的集合。通过调用 swap() 函数,可以交换两个容器的内容,包括其中存储的元素。在这个特定的用法中,QVector() 创建了一个匿名的空 QVector 对象。然后,通过调用 swap(a),将这个空的 QVector 对象与 a 进行内容交换。由于交换后匿名的空 QVector 对象没有任何元素,因此实际上就达到了清空 a 的目的。
  • 好处:通过交换而不是逐个删除元素,可以更高效地清空 QVector 对象。在交换过程中,swap() 函数只需要交换指针,而不需要逐个删除元素,因此速度更快。
  • 注意的是,swap() 操作会改变对象的内容,因此在执行 swap() 后,a 将成为空的 QVector 对象。
  • 例程:
#include <QVector>
#include <QString>
#include <QDebug>

int main()
{
    QVector<QString> a;
    a.append("Item 1");
    a.append("Item 2");
    a.append("Item 3");

    qDebug() << "原始 QVector a 的内容:" << a;

    QVector<QString>().swap(a);

    qDebug() << "清空后的 QVector a 的内容:" << a;

    return 0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 QAbstractTableModel 中添加 QVector 数据,你需要重写 QAbstractTableModel 的以下函数: 1. rowCount():返回数据的行数。 2. columnCount():返回数据的列数。 3. data():返回指定索引位置的数据。 首先,在你的自定义模型类中声明一个 QVector 成员变量,用于存储数据。例如: ```cpp QVector<int> m_data; ``` 然后,在重写的函数中,根据需要处理相关逻辑。以下是一个简单的示例: ```cpp int MyTableModel::rowCount(const QModelIndex& parent) const { Q_UNUSED(parent); return m_data.size(); } int MyTableModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 1; } QVariant MyTableModel::data(const QModelIndex& index, int role) const { if (!index.isValid() || role != Qt::DisplayRole) return QVariant(); if (index.row() >= 0 && index.row() < m_data.size()) { return m_data[index.row()]; } return QVariant(); } ``` 在这个示例中,我们假设 QVector<int> m_data 是一个包含整数数据的向量。rowCount() 函数返回向量的大小,即行数。columnCount() 函数返回 1,表示只有一列。data() 函数根据指定的索引位置返回相应的数据。 当你想要添加新的数据时,可以使用 QVector 的 append() 或 push_back() 函数将新的数据添加到向量中。例如: ```cpp m_data.append(newData); ``` 这样,当你更新模型时,视图会自动更新显示新的数据。记得在适当的地方调用模型的 dataChanged() 函数以通知视图进行更新。 希望这个示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值