从向量矩阵中提取列以存储在数组中

Extracting Columns From a Vector Matrix to store in an Array

问题说明

Edit: Solution is added to the bottom in case anyone needs it

假设我有一个包含以下数据的矩阵

1 3 2 1 7 9 5 8
9 1 3 8 6 9 4 1
3 2 4 0 4 5 7 4
3 5 6 4 6 5 7 4

我想定义一个 size_of_chunks 变量来存储块的数量,例如,如果我设置 size_of_chunks=2 那么矩阵将变为

Chunk1 |  Chunk2 | Chunk3 | Chunk4  
-------|---------|--------|------- 
 1 3   |   2 1   |  7 9   |  5 8
 9 1   |   3 8   |  6 9   |  4 1
 3 2   |   4 0   |  4 5   |  7 4
 3 5   |   6 4   |  6 5   |  7 4

我想使用其中一个块并使用 push_backstd::vector<int>temp(row*col);

       Chunk1 |    
     ---------| 
Start-> 1 3   |   
        9 1   |   
        3 2   |   
  End-> 3 5   |   

所以 temp 将如下所示: temp = {1, 3, 9, 1, 3, 2, 3, 5}

稍后,当我对 chunk 2 执行相同的步骤时,temp 将如下所示:
temp = {1, 3, 9, 1, 3, 2, 3, 5, 2, 1, 3, 8, 4, 0, 6, 4}

代码

int row = 4;
int col = 8;
int size_of_chunk = 2;
std::vector<int> A(row*col);
std::vector<int> temp(row*col);

// Here a Call for the Function to Fill A with Data

for(int r=0;r<row;r++){
  for(int c=0;c<col;c+=size_of_chunk){
    for(int i=0;i<c;i++){
      temp.push_back(A[r*col+i]);
    }
  }
}

它给我的值与最终结果不匹配我应该如何解决这个问题? 谢谢!

解决方案

for(int c=0;c<col;c+=size_of_chunk){
  for(int r=0;r<row;r++){
    for(int i=0;i<size_of_chunk;i++){
      temp.push_back(A[r*col+i+c]);
    }
  }
}

不要在构造函数中指定矢量的大小并使用 push_back,因为这样您最终会得到一个两倍于应有大小的矢量。做一个或另一个。

在这种情况下大概应该是

std::vector<int> temp;

也就是说,从大小为零的向量开始,然后使用 push_back 增加它的大小。