首页 > 解决方案 > 从 C++ 中的二维数组初始化二维向量

问题描述

我有这个代码:

int a[4][4]=
{
   {1,2,3,4},
   {5,6,7,8},
   {9,10,11,12},
   {13,14,15,16}
}

我想初始化 B 定义如下:

vector<vector<int>> b;

我知道我可以用两个循环来做到这一点(也可能用一个循环,如此处所述:https ://stackoverflow.com/a/4092996/654019

但是有什么方法可以在没有任何循环的情况下做到这一点?

标签: c++arraysvectorstl

解决方案


for_each如果您只想避免编写循环并让算法为您执行此操作,则可以使用:https ://godbolt.org/z/jxT8vfhPr

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    int a[4][4] = {
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12},
        {13,14,15,16}
    };
    std::vector<std::vector<int>> b;

    std::for_each(a, a + 4, [&b](auto v){
        b.push_back(std::vector<int>(v, v + 4));
    });

    std::for_each(cbegin(b), cend(b), [&b](auto v) {
        std::copy(cbegin(v), cend(v), std::ostream_iterator<int>(std::cout, " "));
        std::cout << "\n";
    });
}

推荐阅读