我已经实现了这个问题的第一部分,但是没有实现第二部分。我要做的是我有两个向量

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/

10-11 01:30