我已经实现了这个问题的第一部分,但是没有实现第二部分。我要做的是我有两个向量
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矩阵有这个假设,其中2是c矩阵的大小。
最佳答案
复制输出,对于第一次迭代,您将拥有:
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;
}
关于c++ - 如何执行此程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28952451/