多维容器

English

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
}

你可以把它理解为:

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
}

这个结构有:

5. 遍历多维容器

你只需按嵌套容器的方式嵌套循环。


for(auto &row : grid) {
    for(auto &x : row) {
        print(x, " ");
    }
    println();
}

这个模式适用于任意深度。

要点