📜  如何在C++中扁平化Vector或2D Vector(1)

📅  最后修改于: 2023-12-03 15:08:52.153000             🧑  作者: Mango

如何在 C++ 中扁平化 Vector 或 2D Vector

在 C++ 中,有时候我们需要将一个多维的 vector 扁平化为一维的 vector。本文将介绍在 C++ 中如何实现这一操作。

扁平化 Vector

扁平化 Vector 就是将一个二维的 vector 转换成一个一维的 vector。我们可以使用双重循环来将所有元素加入到一个新的 vector 中来实现。

vector<vector<int>> v = {{1, 2}, {3, 4, 5}, {6}};
vector<int> flattened_v;

for (auto x : v)
    for (auto y : x)
        flattened_v.push_back(y);
扁平化 2D Vector

扁平化 2D Vector 就是将一个 N 维的 vector 转换成一个一维的 vector。我们可以使用递归来将一个多维的 vector 扁平化为一个一维的 vector。

template <typename T>
vector<T> flatten(const vector<vector<T>>& v)
{
    vector<T> flattened_v;
    for (auto x : v)
        if (x.empty())
            continue;
        else if (x.size() == 1)
            flattened_v.push_back(x[0]);
        else
        {
            vector<T> sub_v(x.begin() + 1, x.end());
            auto flattened_sub_v = flatten(sub_v);
            flattened_v.push_back(x[0]);
            flattened_v.insert(flattened_v.end(), flattened_sub_v.begin(), flattened_sub_v.end());
        }
    return flattened_v;
}

这个函数使用了模板来支持不同类型的 vector。我们首先创建一个空的 vector 作为结果,然后遍历所有的元素。如果一个元素是一个空 vector,我们就跳过它;如果一个元素只包含一个元素,我们就将这个元素加入到结果中;如果一个元素包含多个元素,我们就递归扁平化这个元素,并将第一个元素加入到结果中,然后将扁平化后的 vector 加入到结果中。最后返回结果。

使用这个函数可以轻松地将一个多维的 vector 扁平化为一个一维的 vector。例如:

vector<vector<int>> v = {{1, 2}, {3, 4, 5}, {6}};
auto flattened_v = flatten(v);

这个例子中,将会得到如下结果:

{ 1, 2, 3, 4, 5, 6 }

这就是扁平化一个多维的 vector 的方法。