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) # 四维数组
通用优化技巧
-
封装辅助函数(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); -
利用
auto关键字(C++11+):auto arr = std::vector(2, std::vector(3, std::vector(4, std::vector<int>(5, 0))));
选择建议
- C++ 场景:优先使用模板元编程或辅助函数生成多维
vector,兼顾代码简洁性和可维护性。 - Python 场景:直接使用
numpy高维数组,语法简洁且性能高效。 - 算法题优化:若需极致性能,可用一维数组模拟多维(尤其适用于 C++)。
通过上述方法,可以有效简化高维数组的定义,提升代码的可读性和编写效率。

浙公网安备 33010602011771号