【问题标题】:Writing a function that will flatten a two dimensional Array编写一个将二维数组展平的函数
【发布时间】:2018-05-05 05:07:00
【问题描述】:

所以,我正在尝试编写一个函数,将二维向量展平为一维向量并返回它。例如:

如果我有一个矩阵:

8 7 6 3

2 1 9 4

1 2 3 8

它会简单地将其展平为包含以下内容的一维向量:

8、7、6、3、2、1、9、4、1、2、3、8、

虽然我发现这有很大的困难。这是我目前所拥有的。

std::vector<int> flatten (std::vector< std::vector< int > > vec)
{
    std::vector<int> flattened (begin(vec), end(vec));

    return flattened;

}

据我了解,这允许我使用第一行中的值创建一个向量,但由于我是 C++ 新手,我不确定如何进入下一列并添加该行到展平的向量。

任何帮助将不胜感激!

【问题讨论】:

  • 你的标题真的和你问的问题不符......想想你将如何手工完成并从那里编写代码。

标签: c++ function multidimensional-array vector flatten


【解决方案1】:

为二维向量编写一个通用的flatten 方法

#include <vector>

template <typename T>
std::vector<T> flatten(const std::vector<std::vector<T>> & vec) {   
    std::vector<T> result;
    for (const auto & v : vec)
        result.insert(result.end(), v.begin(), v.end());                                                                                         
    return result;
}

查看有效的DEMO

【讨论】:

    【解决方案2】:
    std::vector<int> flatten (std::vector< std::vector< int > > vec)
    {
        std::vector<int> flattened;
        for (auto & v : vec){
             std::copy (v.begin(), v.end(), std::back_inserter(flattened));
        }
        return flattened;
    
    }
    

    【讨论】:

    • 表示类“std::vector>”没有成员追加。
    • 非常感谢!
    猜你喜欢
    • 2015-07-21
    • 2011-02-03
    • 2015-07-17
    • 2011-07-26
    • 1970-01-01
    • 2012-01-07
    • 2017-01-03
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多