C++定义高纬度vector

C++定义高纬度vector

内容

在处理算法题时,定义高维数组确实可能因语法冗长而影响效率。以下是针对不同编程语言的简洁解决方案:


C++ 解决方案

1. 模板元编程生成多维 vector

通过递归模板自动推导嵌套类型,实现高维数组的声明:

template <typename T, int N>
struct MultiVector {
    using type = std::vector<typename MultiVector<T, N-1>::type>;
};

template <typename T>
struct MultiVector<T, 0> {
    using type = T;
};

// 使用示例:定义四维 int 数组
MultiVector<int, 4>::type arr(2, 
    MultiVector<int, 3>::type(3, 
        MultiVector<int, 2>::type(4, 
            std::vector<int>(5, 0)
        )
    )
);

2. 类型别名简化声明

using 为固定维度定义别名:

using 4DVec = std::vector<std::vector<std::vector<std::vector<int>>>>;
4DVec arr(dim1, std::vector<std::vector<std::vector<int>>>(
    dim2, std::vector<std::vector<int>>(
        dim3, std::vector<int>(dim4, 0)
    )
));

3. 一维数组模拟多维(高效但需手动计算索引)

std::vector<int> arr(dim1 * dim2 * dim3 * dim4, 0);
// 访问元素 [i][j][k][l]
int val = arr[i * (dim2*dim3*dim4) + j * (dim3*dim4) + k * dim4 + l];

Python 解决方案

1. 列表推导式快速创建

# 四维数组初始化
dim1, dim2, dim3, dim4 = 2, 3, 4, 5
arr = [[[[0 for _ in range(dim4)] 
        for _ in range(dim3)] 
        for _ in range(dim2)] 
        for _ in range(dim1)]

2. 使用 numpy 直接创建高维数组

import numpy as np
arr = np.zeros((dim1, dim2, dim3, dim4), dtype=int)  # 四维数组

通用优化技巧

  1. 封装辅助函数(C++):

    template <typename T>
    auto make_vector(int dim, T init) {
        return std::vector<T>(dim, init);
    }
    
    template <typename T, typename... Args>
    auto make_vector(int dim, Args... args) {
        return std::vector(dim, make_vector<T>(args...));
    }
    
    // 使用示例:创建 4D 数组(维度 2x3x4x5)
    auto arr = make_vector<int>(2, 3, 4, 5, 0);
    
  2. 利用 auto 关键字(C++11+)

    auto arr = std::vector(2, std::vector(3, std::vector(4, std::vector<int>(5, 0))));
    

选择建议

  • C++ 场景:优先使用模板元编程或辅助函数生成多维 vector,兼顾代码简洁性和可维护性。
  • Python 场景:直接使用 numpy 高维数组,语法简洁且性能高效。
  • 算法题优化:若需极致性能,可用一维数组模拟多维(尤其适用于 C++)。

通过上述方法,可以有效简化高维数组的定义,提升代码的可读性和编写效率。

posted @ 2025-03-16 16:40  Gold_stein  阅读(90)  评论(0)    收藏  举报