说我有两个这样的矢量:
std::vector<std::vector<double> > A(2, std::vector<double>(6));
std::vector<double> B(3);
在Matlab中,我可以按如下方式定义A
:
A(1, 1:2:end) = B;
A(2, 2:2:end) = B;
这样可以将B
的元素首先分配到A[0][0]
,A[0][2]
,A[0][4]
,然后分配到A[1][1]
,{{1} },A[1][3]
。例如,如果A[1][5]
为B
,则{1, 4, 9}
将为:
A
有没有办法在没有for循环的情况下在C ++中执行此操作?
答案 0 :(得分:3)
您可能希望改为使用std::valarray
:
std::valarray<std::valarray<double>> A(std::valarray<double>(6), 2);
std::valarray<double> B{ 1, 4, 9 };
A[0][std::slice(0,B.size(),2)] = B;
A[1][std::slice(1,B.size(),2)] = B;
输出:
1 0 4 0 9 0
0 1 0 4 0 9