gpt4 book ai didi

c++ - 创建一批随机矩阵

转载 作者:太空狗 更新时间:2023-10-29 21:38:38 24 4
gpt4 key购买 nike

我想创建一批随机大小 (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));

}
}

这是我目前所拥有的,我无法决定解决这个问题的最佳方法是指针还是其他方法?使用列表是存储它们的最佳方式吗?

顺便说一句,我知道代码中存在问题..它正在调试中。

最佳答案

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;
}

关于c++ - 创建一批随机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com