从向量矩阵中提取列以存储在数组中
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_back
到 std::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
增加它的大小。
问题说明
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_back
到 std::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
增加它的大小。