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

C++如何从std::vector<std::tuple<int, float>>提取std::vector<int>用于构造初始化列表

实现方案

存在可直接用于构造函数初始化列表的单行实现,根据你使用的C++标准可选以下两种方案:

C++20 及更高版本

直接使用标准库范围工具实现,代码最简洁:

#include <vector>
#include <tuple>
#include <ranges>

class Demo {
    const std::vector<int> target_vec;
public:
    Demo(std::vector<std::tuple<int, float>> input)
        : target_vec(input | std::views::transform([](const auto& t) { return std::get<0>(t); }) | std::ranges::to<std::vector<int>>())
    {}
};

代码说明:std::views::transform 会遍历输入容器提取每个tuple的第一个元素,再通过std::ranges::to直接转换为std::vector<int>,整个表达式可以直接放在初始化列表中。

C11 ~ C17 兼容版本

如果使用旧标准,可以用立即调用的lambda表达式实现,不需要额外定义辅助函数:

#include <vector>
#include <tuple>
#include <algorithm>
#include <iterator>

class Demo {
    const std::vector<int> target_vec;
public:
    Demo(std::vector<std::tuple<int, float>> input)
        : target_vec([&input]() {
            std::vector<int> res;
            res.reserve(input.size());
            std::transform(input.cbegin(), input.cend(), std::back_inserter(res), [](const std::tuple<int, float>& t) { return std::get<0>(t); });
            return res;
        }())
    {}
};

代码说明:lambda定义完成后直接加()执行,返回的vector直接用于const成员初始化,整个初始化逻辑是初始化列表中的单条语句,满足你的要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:07