我想创建一批随机大小(10-1000)和随机数据的矩阵。我需要以某种方式安排这个批次,以便我可以在以后的数据处理中使用它,所以它们需要逐个访问。
#include <stdio.h>
#include <assert.h>
#include <list>;
unsigned char* createAMatrix(int width,int hight){
unsigned char mat[width][hight];
unsigned char* ptr;
srand(100);
for(int row=0;row<hight;row++){
for(int col=0;col<width;col++){
mat[row][col]=rand();
}
}
ptr=&mat[0][0];
return ptr;
}
int main(int argc, char **argv)
{
std::list<unsigned char*> matList;
//create a batch of matrixes
int batchSize=1;
srand(100);
for(int k=0;k<batchSize;k++){
//set 10-1000 hight & width
int matWidth=rand()%990+10;
int matHight=rand()%990+10;
//create matrix
matList.push_back(createAMatrix(matWidth,matHight));
}
}
这是我到目前为止所做的事情,我无法确定解决这个问题的最佳方法是指针还是其他方法?使用列表是存储它们的最佳方式吗?
BTW我知道代码中存在问题..它正在调试中。
答案 0 :(得分:2)
unsigned char mat[width][hight];
是一个局部变量,当函数createAMatrix
返回时超出范围。你必须分配动态内存。像这样调整你的代码:
unsigned char* createAMatrix(int width,int hight){
unsigned char* ptr = new unsigned char[width*hight];
srand(100);
for(int row=0;row<hight;row++){
for(int col=0;col<width;col++){
ptr [row*hight+col]=rand();
}
}
return ptr;
}
注意,您必须在程序结束时delete
分配内存。
int main(int argc, char **argv)
{
std::list<unsigned char*> matList;
//create a batch of matrixes
int batchSize=1;
srand(100);
for(int k=0;k<batchSize;k++){
//set 10-1000 hight & width
int matWidth=rand()%990+10;
int matHight=rand()%990+10;
//create matrix
matList.push_back(createAMatrix(matWidth,matHight));
}
for ( std::list<unsigned char*>::iterator it = matList.begin(); it != matList.end(); it++ )
delete *it;
}
我建议使用std::vector
代替动态内存分配。这是std::vector<std::vector<unsignd char>>
void createAMatrix(int width,int hight, std::vector<std::vector<unsignd char>> &mat ){
srand(100);
mat.reserve( hight );
for(int row=0;row<hight;row++){
mat.push_back( std::vector(width) );
for(int col=0;col<width;col++){
mat.back().push_back( rand() );
}
}
return ptr;
}