【发布时间】:2021-10-02 15:35:45
【问题描述】:
我有这个代码:
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
但是有什么方法可以让我在没有任何循环的情况下做到这一点?
【问题讨论】:
-
你可以用递归来做,这样可以避免任何循环。虽然它比使用循环效率低。
-
我不确定您具体在寻找什么。我尝试在没有(可见)循环的情况下做到这一点:demo on coliru
-
数据需要从数组复制到
vector,所以不管你写不写,都会有循环、递归或展开循环在某处完成工作。建议:您可以通过将vectors 的vector替换为单个vectorthat LOOKS like it's 2D 来简化工作。对于小型矩阵,这通常使用起来要快得多,因为所有数据都在一个易于缓存的块中。 -
这里是如何在没有循环的情况下初始化 b:
auto b = vector<vector<int>>{ { a[0][0], a[0][1], a[0][2], a[0][3] }, { a[1][0], a[1][1], a[1][2], a[1][3] }, { a[2][0], a[2][1], a[2][2], a[2][3] }, { a[3][0], a[3][1], a[3][2], a[3][3] }, }; -
@Eljay 这比使用循环快吗?