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

C++中能否对自定义结构体组成的vector实现类似Python的切片操作?

C++ 提取结构体容器指定字段的实现方案

C++ 标准库没有提供和 Python 完全一致的原生切片语法,你可以通过以下几种方式实现提取所有 v0 字段的需求:

通用兼容写法(支持 C++11 及以上所有版本)

最易读、兼容性最好的实现,手动遍历容器收集字段即可:

#include <vector>

std::vector<unsigned int> all_v0;
all_v0.reserve(faces.size()); // 预分配内存避免多次扩容,提升性能
for (const auto& item : faces) {
    all_v0.push_back(item.v0);
}

标准库算法实现(C++11 及以上)

使用 std::transform 实现函数式风格的写法,逻辑和遍历完全等价:

#include <vector>
#include <algorithm>

std::vector<unsigned int> all_v0(faces.size());
std::transform(faces.cbegin(), faces.cend(), all_v0.begin(), [](const ivec3& face) {
    return face.v0;
});

C++20 Ranges 写法(最接近 Python 切片体验)

如果使用 C++20 及以上版本,可以通过 Ranges 库实现类似 Python 的懒加载切片效果,不需要提前拷贝数据就可以直接遍历所有 v0 字段,需要持久化存储时再转为 vector 即可:

#include <vector>
#include <ranges>

// 生成懒加载视图,无内存拷贝,可直接遍历所有v0
auto v0_view = faces | std::views::transform(&ivec3::v0);

// 需要持久化存储为vector时再加这一步
std::vector<unsigned int> all_v0(v0_view.begin(), v0_view.end());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:07