创建一批随机矩阵
create a batch of random matrices
我想创建一批随机大小(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;
}
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 将字符随机转换为大写的函数
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何生成一个随机的 n 位数,其中 n 是任意的
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 在C++中随机生成 20 个非重复数字
- GCC:随机构建导致执行期间分段错误
- 如何使用 SML 随机生成八进制元组
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- 创建一批随机矩阵