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

如何在现代C++中返回指定维度与类型的多维vector?

在现代C++中实现n维vector类型生成

当然可以实现,核心思路是利用模板递归在编译期生成嵌套的std::vector类型。以下是具体实现方案:

1. 编译期生成n维vector类型

通过模板元编程定义类型别名,直接得到目标类型:

#include <vector>

// 基础模板声明
template<int N, typename T>
struct NDVector;

// 终止条件:1维vector
template<typename T>
struct NDVector<1, T> {
    using type = std::vector<T>;
};

// 递归生成n维vector
template<int N, typename T>
struct NDVector {
    using type = std::vector<typename NDVector<N-1, T>::type>;
};

// 简化使用的模板别名
template<int N, typename T>
using NDVector_t = typename NDVector<N, T>::type;

使用示例

  • NDVector_t<1, float> → 等价于 std::vector<float>
  • NDVector_t<2, float> → 等价于 std::vector<std::vector<float>>
  • NDVector_t<3, int> → 等价于 std::vector<std::vector<std::vector<int>>>

2. 生成空n维vector对象的函数

如果需要直接返回空的n维容器,可以封装一个函数:

template<int N, typename T>
NDVector_t<N, T> createNDVector() {
    return {};
}

调用示例

int main() {
    auto vec1 = createNDVector<1, float>(); // 类型是std::vector<float>
    auto vec2 = createNDVector<2, float>(); // 类型是std::vector<std::vector<float>>
    auto vec3 = createNDVector<3, int>();   // 类型是std::vector<std::vector<std::vector<int>>>
    return 0;
}

注意事项

  • 这里的维度N必须是编译期常量,因为C模板参数需要在编译时确定。如果需要支持运行时动态指定维度,无法返回静态类型的嵌套vector(C是静态类型语言),这种场景可以考虑使用std::variant或动态类型容器,但通常这类需求都是基于编译期确定维度的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:35:21