You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++17实现任意类型QVector的转换函数?

实现任意类型QVector转换的C++17函数

下面是满足需求的函数实现,它能接收任意类型的QVector,通过传入的转换函数将元素转为目标类型,最后返回新的QVector:

#include <QVector>

auto my_function(auto in, auto f) 
{
    // 推导转换后的元素类型
    using OutType = decltype(f(*in.begin()));
    QVector<OutType> result;
    
    // 预分配内存,避免频繁扩容,提升性能
    result.reserve(in.size());

    // 遍历原容器,应用转换函数并填充新容器
    for (const auto& elem : in) {
        result.push_back(f(elem));
    }

    return result;
}

关键点说明

  • auto参数:利用C++17的模板参数推导特性,让函数自动适配任意QVector类型(比如QVector<int>、QVector<double>)和任意可调用转换对象(lambda表达式、函数指针、仿函数等)。
  • 类型推导:通过decltype(f(*in.begin()))自动获取转换后的元素类型,无需手动指定模板参数。
  • 性能优化:调用reserve(in.size())提前分配足够内存,避免QVector在添加元素时多次扩容,提升遍历和插入效率。

使用示例

#include <QString>

// 定义转换lambda:int转QString
auto my_lambda = [] (int x) { return QString::number(x); };
QVector<int> in_vector = {1,2,3};
// 转换得到QVector<QString>
QVector<QString> res = my_function(in_vector, my_lambda);

你还可以用它实现其他类型转换,比如将整数转为浮点数:

QVector<int> num_list = {4,5,6};
auto float_list = my_function(num_list, [] (int n) { 
    return static_cast<double>(n) / 2.0; 
});

内容的提问来源于stack exchange,提问作者Alex Nevskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:00:04