所以我的代码如下。我正在制作矩阵/或pgm图像。通过镶板我的意思是在一定数量的列和行中重复自己。它看起来就像其中一个窗户,窗格全部分隔每个玻璃部分。
一个例子:http://1.bp.blogspot.com/_OLskT-GO5VE/TGqgrSX_o_I/AAAAAAAAA-4/vcCdn6hA3fI/s320/2007_12_warhol_cambell_soup.jpg这是一个4x8的汤罐矩阵(它本身就是一个巨大的像素矩阵。
我认为段错误发生在索引= k的某个地方,但我找不到任何错误。我正在重新调整矩阵的大小,以便它不应该是它。
编辑:修复示例。
void panel(vector <VecofInts> &p, int inputRow, int inputColumn)
{
int i, j, v = 1, g = 1, k = 0, row, col;
row = p.size();//obtaining the original rows
col = p[0].size();//obtaining the original columns
p.resize((r * row)); //sets up the new matrix so I can add new elements.
/* This is my first test loop for the columns; I know I can create a single loop
for rows and columns but this will help me find problems more easily */
while(v < c){
...
}
/* this is the loop I'm having trouble with */
v=1;
while(v < c){
k = row;
while(g < r){
for(i = 0; i < row; i++){
k = k + i;
for(j = 0; j < col; j++){
p[k].push_back(p[i][j]);
}
}
g++;
k++; //this allows the g<r loop to continue and k not repeat itself
//in the first i loop again.
}
v++;
}
}
答案 0 :(得分:0)
当您在for循环中使用k = k + i
时,您将获得k = 0,1,3,6,10,15 ......
我认为你的目的是k++
?
编辑:
请参阅k = k + i
的评论:
while(v < c){
k = row;
while(g < r){
for(i = 0; i < row; i++){
k = k + i; // ####### k = (row), (row+1), (row+3), (row+6), (row+10),(row+15)....
for(j = 0; j < col; j++){
p[k].push_back(p[i][j]);
}
}
g++;
k++; //this allows the g<r loop to continue and k not repeat itself
//in the first i loop again.
}
答案 1 :(得分:0)
从你的例子中不太清楚你的意图是什么 顺便说一下,我建议采用这种通用方法:
typedef std::vector<int> VecofInts;
typedef std::vector<VecofInts> Matrix;
typedef std::vector<int>::iterator RowIterator;
void panel(const Matrix& m, int inputRow, int inputColumn) {
const int column = m.size(); /* Number of column, each colum is a vec of int */
RowIterator it;
for(int i=0; i != column; i++) {
it = m[i].begin();
/* m[i] represent a row on your matrix */
for(; it != m[i].end; it++) {
...
}
}
}