将Vector转换为QJsonArray的最快方法是什么?

3

目前,我正在通过迭代一个向量来将其转换为QJsonArray:

QJsonArray toJson(const std::vector<unsigned short>& myVec) {
    QJsonArray result;
    for(auto i = myVec.begin(); i != myVec.end(); i++) {
        result.push_back((*i));
    }
    return result;
}

然而,这会导致我的程序出现小的延迟。是否有另一种方法来接收一个包含向量数据的QJsonArray?(不需要进行深拷贝。)

1个回答

5
很抱歉,除了您设计的方法之外,没有更快的方法。 QJsonArrayQJsonValue 值组成,可以封装不同类型的本地值:NullBoolDoubleString、...、Undefined。但是,std::vector 只包含一种类型的值。因此,每个向量值都应单独转换为 QJsonValue,并且没有像 memcopy 这样更快的方法。
无论如何,您都可以缩短函数。
QJsonArray toJson(const std::vector<unsigned short>& myVec) {
    QJsonArray result;
    std::copy (myVec.begin(), myVec.end(), std::back_inserter(result));
    return result;
}

啊,所以慢的原因是每个值都需要转换为QJsonValue? - Griffort
没错。此外,QJsonArray API没有提供比push_back更快的emplace_back函数。 - 273K
1
一个可能的优化领域是内存分配。QJsonArray 没有一次性“保留” N 个元素的方法,但 QVariantList 有 - 而且 QJsonArray 有一个有点优化的静态函数 QJsonAray::fromVariantList。值得至少测试一下。 - Daniel Waechter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接