我已经实现了这个问题的第一部分但未能实现第二部分。我想要做的是我有两个向量
std::vector<double> A = {1,1,2,2};
std::vector<double> B = {3,3,4,4,5,5};
我必须经历两个循环并减去两个数学向量。例如,
第一次迭代:
C = [1;1] (Note: the first two elements of A vector)
因为C是2x1,我必须从B构造三个相同大小的数学向量,因此第一次迭代的输出是
1 - 3
1 - 3
------
1 - 4
1 - 4
------
1 - 5
1 - 5
对于第二次迭代,C矩阵每次迭代扩展两个元素,因此新的C矩阵为C = [1;1;2;2]
。现在我们需要再次进行减法,第二次迭代的输出是
1 - 3
1 - 3
2 - 4
2 - 4
------
1 - 4
1 - 4
2 - 5
2 - 5
------
1 - 5
1 - 5
2 - 3
2 - 3
如您所见,第二个数学向量被移动了两个元素,其中第一个数学向量保持原样。
A和B矩阵具有这个假设size % 2 = 0
,其中2是C矩阵的大小。
答案 0 :(得分:1)
复制你的输出,首次迭代你会得到:
std::vector<double> A = {1,1,2,2};
std::vector<double> B = {3,3,4,4,5,5};
std::vector<double> C (A.begin(), A.begin()+2);
// bg - index of group of 2 elements in B
for (int bg = 0; bg < 3; ++bg) {
for (int ci = 0; ci < int(C.size()); ++ci) {
// bi - index of element in B
int bi = (2*bg + ci) % int(B.size());
std::cout << C[ci] << " - " << B[bi] << std::endl;
}
std::cout << "------" << std::endl;
}
对于第二次迭代,您必须更改一行:
// line changed...
std::vector<double> C (a.begin(), a.begin()+4);
编辑:好的,这是更通用的表单,它输出您为迭代计数器it
的更改指定的两种情况。希望它在扩展向量时有效。
for (int it = 1; it <= int(A.size())/2; ++it) {
std::vector<double> C (A.begin(), A.begin()+it*2);
// bg - index of group of 2 elements in B
for (int bg = 0; bg < int(B.size())/2; ++bg) {
for (int ci = 0; ci < int(C.size()); ++ci) {
// bi - index of element in B
int bi = (2*bg + ci) % int(B.size());
std::cout << C[ci] << " - " << B[bi] << std::endl;
}
std::cout << "------" << std::endl;
}
std::cout << std::endl;
}