在 C++ 中生成和存储随机数组
generating and storing random arrays in c++
我正在开发一个程序,该程序将初始数组作为输入,然后从初始数组随机生成 10 个随机数组。
我编写了一个函数来从初始数组生成单个随机数组。
但是,我无法开发在主函数中调用此函数并生成 10 个此类随机数组的代码。我还将使用这 10 个随机生成的数组在 main 函数中进行进一步计算。
由于我对C++的了解目前有限,因此我不知道使用向量进行动态分配。如果有人可以指导有关要在主函数中使用的代码,那将非常有帮助。
这里int initial[]
是第一个使用int *newparents()
函数生成其他 10 个随机数组的数组。当在 main 中调用newparents()
函数时,它会返回一个随机洗牌的数组。
我会请求您通过调用newparents()
函数然后在 main 函数中生成 10 个随机数组,然后存储它们以供进一步使用,从而帮助您生成 10 个随机数组。
法典:
int initial[] =
{ 10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200 };
int size = sizeof(initial) / sizeof(initial[0]);
int *newparents()
{
int *pt = new int[size];
random_shuffle(&initial[0], &initial[size]);
for (unsigned i = 0; i<size; i++)
{
pt[i] = initial[i];
}
return pt;
}
int main()
{
int *p;
p = newparents();
cout << "p1=" << " ";
for (int i = 0; i<size; i++)
{
cout << *(p + i) << " ";
}
return 0;
}
谢谢你的帮助。
使用std::vector
执行此操作的简单方法:
#include <iostream>
#include <vector>
#include <algorithm>
std::vector< std::vector<int> >
GenerateRandomArrays( std::vector<int> const & inInitialArray, int inNumberOfArrays)
{
std::vector<std::vector<int> > generatedArrays;
std::vector<int> tempArray(inInitialArray);
for (int i = 0; i < inNumberOfArrays; i++)
{
std::random_shuffle(tempArray.begin(), tempArray.end());
generatedArrays.push_back(tempArray);
}
return generatedArrays;
}
int main() {
// Creates the initial array.
std::vector<int> initial{ 10,20,30,40,50 };
auto blah = GenerateRandomArrays(initial, 10);
return 0;
}
输出:
50 20 40 30 10
50 40 30 10 20
20 10 30 50 40
30 40 20 10 50
30 50 20 10 40
20 50 10 40 30
50 30 20 10 40
30 40 20 10 50
20 10 50 40 30
20 50 10 40 30
注意:我创建一个新tempArray
只是因为我认为您不想更改intial
向量。如果不适合您,那么您可以洗牌initial
数组本身并将其添加到向量向量中。
要使用代码创建指向随机数组的 10 个指针的数组,您可以简单地:
int *arr[10];
for (int i = 0; i < 10; ++i)
arr[i] = newparents();
int *arr[10];
将创建 10 个指向int
的指针的数组,这就是您的newparents();
函数返回的内容,一个指向随机数组前int
的指针。
由于您在堆上分配了这些数组,因此请确保在完成这些数组后释放该内存:
for (int i = 0; i < 10; ++i)
delete[] arr[i];
我编写了一个函数来从初始数组生成单个随机数组。
不,您编写了一个函数来就地洗牌初始数组,然后复制它。坦率地说,这有点奇怪,因为我不明白为什么要就地改变全局(在第一次调用函数后,全局数组仍然称为"初始",但不再处于初始状态(。
由于我对C++的了解目前有限,因此我不知道使用向量进行动态分配。
重点是std::vector
为您处理所有分配,避免了当前代码中的内存泄漏和手动复制。
如果你花时间正确使用C++,而不是尝试用C++编写 C,代码就非常简单了:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
// let's avoid mutating our global state
const std::vector<int> Seeds =
{10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200};
// this shuffles a copy of the argument passed
std::vector<int> shuffle(std::vector<int> v) {
std::random_shuffle(begin(v), end(v));
return v;
}
// return n independently-shuffled copies of "initial"
std::vector<std::vector<int>> shuffle_n(size_t n,
std::vector<int> const& initial) {
std::vector<std::vector<int>> result(n);
std::generate_n(begin(result), n,
[&initial]() {
return shuffle(initial);
});
return result;
}
int main() {
// one line to create 10 shuffled vectors
auto allparents = shuffle_n(10, Seeds);
// and one loop to print them all
for (auto &v : allparents) {
std::cout << '{';
std::copy(begin(v), end(v),
std::ostream_iterator<int>(std::cout, " "));
std::cout << "}n";
}
}
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 将字符串存储在c++中的稳定内存中
- 为什么 Serial.println(<char[]>);返回随机字符?
- std::原子加载和存储都需要吗
- 字符串-C++后显示的随机字符
- C++:将控制台输出存储在宏中更好吗
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 使用QProcess执行命令,并将结果存储在QStringList中
- C++ 如何生成 10,000 个 UNIQUE 随机整数以存储在 BST 中?
- 动态分配存储数据在堆中的随机位置中
- 为什么数据中的随机部分替换了曾经存储在我的角色数组中的其他数据
- 在 c++ 中将随机生成的整数存储为变量
- 如何在位集中存储随机生成的无符号整数
- 如何存储允许O(1)随机访问的三维地图?(C++)
- 如何存储需要随机选择和删除的数据,矢量,哈希表或其他
- 存储const char*会给我随机字符
- fread在缓冲区中存储随机字符
- 二维数组,计算并存储6个随机连接点
- 存储套接字信息随机访问速度