多维容器
1. 什么是“多维容器”?
C++ 中并没有专门的多维容器语法或内建类型。 相反,你是通过把容器嵌套进容器来创建它们的。
例如:
- 容器的容器 → 二维
- 容器的容器的容器 → 三维
- 容器的容器的容器的容器 → 四维
这对任何容器都适用:::fast_io::vector、
::fast_io::string、::fast_io::array,或者你自己的类型。
在实践中,::fast_io::vector<T> 是默认容器。
它会自动增长,也是多维结构中最容易使用的。
2. 二维容器(容器的容器)
二维容器就是一个每个元素本身也是容器的容器。
示例:二维 vector
#include
#include
int main() {
using namespace ::fast_io::iomnp;
// A vector where each element is another vector
::fast_io::vector<::fast_io::vector> grid{
{1zu, 2zu, 3zu},
{4zu, 5zu, 6zu},
{7zu, 8zu, 9zu}
};
println(grid[1][2]); // prints 6
}
示例:字符串 vector
字符串的 vector 也是一个二维容器:
- 外层维度 → 字符串列表
- 内层维度 → 每个字符串内部的字符
::fast_io::vector<::fast_io::string> lines{
"Hello",
"fast_io",
"world"
};
println(lines[0][1]); // 'e'
示例:vector 的 array
#include
#include
#include
int main() {
using namespace ::fast_io::iomnp;
::fast_io::array<::fast_io::vector, 3zu> buckets{
::fast_io::vector{1zu, 2zu},
::fast_io::vector{3zu},
::fast_io::vector{4zu, 5zu, 6zu}
};
println(buckets[2][1]); // prints 5
}
3. 三维容器(容器的容器的容器)
三维容器只是再多一层嵌套。
#include
#include
int main() {
using namespace ::fast_io::iomnp;
::fast_io::vector<
::fast_io::vector<
::fast_io::vector
>
> cube{
{
{1zu, 2zu, 3zu},
{4zu, 5zu, 6zu}
},
{
{7zu, 8zu, 9zu},
{10zu, 11zu, 12zu}
}
};
println(cube[1][0][2]); // prints 9
}
你可以把它理解为:
- 2 个“层”
- 每层有 2 个“行”
- 每行有 3 个“列”
4. 四维容器(容器的容器的容器的容器)
四维容器只是在三维之上再多一层嵌套。
#include
#include
int main() {
using namespace ::fast_io::iomnp;
::fast_io::vector<
::fast_io::vector<
::fast_io::vector<
::fast_io::vector
>
>
> hypercube{
{
{
{1zu, 2zu},
{3zu, 4zu}
},
{
{5zu, 6zu},
{7zu, 8zu}
}
},
{
{
{9zu, 10zu},
{11zu, 12zu}
},
{
{13zu, 14zu},
{15zu, 16zu}
}
}
};
println(hypercube[1][0][1][1]); // prints 12
}
这个结构有:
- 2 个块
- 每块有 2 层
- 每层有 2 行
- 每行有 2 列
5. 遍历多维容器
你只需按嵌套容器的方式嵌套循环。
for(auto &row : grid) {
for(auto &x : row) {
print(x, " ");
}
println();
}
这个模式适用于任意深度。
要点
- C++ 没有内建的多维容器。
- 你通过嵌套容器来创建多维结构。
- 容器的容器 → 二维;容器的容器的容器 → 三维;依此类推。
- 你可以自由混用
vector、string和array。 ::fast_io::vector<T>是默认容器,也是最灵活的选择。- 嵌套之所以可行,是因为容器的行为就像普通值,可以互相存储在彼此内部。