在多次迭代中创建随机大小(在特定范围内)的数组
Create randomly sized (within a certain range) arrays over many iterations
我正在尝试创建许多由随机数和随机大小组成的数组,例如,1 到 20 个元素的范围。我的代码有时有效。
我在所需范围之间使用随机数来确定数组大小。例如,如果第一次迭代产生的数组大小为 10,那么出于某种原因,我的代码不想创建任何大于 10 的数组。将创建各种数组(并将输出这些数组的列表),直到某个迭代产生大于 10 的随机数。然后我得到这个错误:
数组索引超出范围的数字->[11] 有效数字[9]
"数字"是数组的名称。这是我代码的相关部分:
srand(time(0));
int j, flag = 0;
int temp;
int rand=1;
for(int t=0; t<50; t++)
{
int length = rand()% 20 + 1;
cout<<"length is " << length << endl;
int numbers[length];
for(int i = 0; i < length; i++)
{
numbers[i]=rand();
cout << numbers[i] << endl;
}
for(j=0; (j<=length); j++)
{
for (int i=0; i<(length-1); i++)
{
if(numbers[i+1]<numbers[i])
{
temp=numbers[i];
numbers[i]=numbers[i+1];
numbers[i+1]=temp;
flag++;
}
}
}
cout << "Number of Swaps : " << flag << endl;
}
正如@Bob__所写,分配可变长度数组并不是C++标准。它有时可能适用于特定的编译器,但可能会在其他编译器上中断。
但是有很好的选择。您可以使用 new
分配动态内存。例如:
int *array = new int[size];
array[0] = 3;
array[1] = 5;
cout << array[1];
delete [] array;
不要忘记事后删除带有delete
的内存。
或者您可以使用vector<int>
.这是一个STL容器,正是为此目的而制造的。
#include <vector>
using namespace std;
...
vector<int> vec(size);
vec[0] = 3;
vec[1] = 5;
cout << vec[1];
可变长度数组不是C++标准,而只是由一些编译器作为扩展提供。我不会相信他们,你的代码中真的不需要这样的东西。您可以在外部 for 循环之外声明数组,因为您知道它的最大长度:
#define MAXL 20
int numbers[MAXL];
for ...
int length = rand() % MAXL + 1;
...
此外,如果您正在实现气泡排序,我认为内部 i 循环的条件应该是 i
-
rand
用于两种上下文。作为变量int rand
和函数std::rand()
。我建议删除任何using namespace std;
但由于无论如何都不需要该变量,您也可以删除int rand = 1;
.请注意,rand()
是一个 C 函数。你可以使用它,但恕我直言,std::rand()
更纯粹C++。 -
int numbers[length];
不会编译,因为length
是非常量。请改用std::vector<int> numbers(length);
。
仅此而已。
#include <iostream>
#include <vector>
#include <time.h>
int main()
{
std::srand(time(0));
int j, flag = 0;
int temp;
for (int t = 0; t < 50; t++)
{
int length = std::rand() % 20 + 1;
std::cout << "length is " << length << std::endl;
std::vector<int> numbers(length);;
for (int i = 0; i < length; i++)
{
numbers[i] = std::rand();
std::cout << numbers[i] << std::endl;
}
for (j = 0; (j <= length); j++)
{
for (int i = 0; i < (length - 1); i++)
{
if (numbers[i + 1] < numbers[i])
{
temp = numbers[i];
numbers[i] = numbers[i + 1];
numbers[i + 1] = temp;
flag++;
}
}
}
std::cout << "Number of Swaps : " << flag << std::endl;
}
}
相关文章:
- 并行用于C++17中数组索引范围内的循环
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 按字母顺序对结构内数组变量中的名称进行排序
- Excel 不愉快地显示大型 2D 范围公式数组
- 变量未在此范围内声明 数组线性搜索
- 对于多个查询,查找在 l 到 r 范围内具有相同元素的最长公共子数组
- C++ 如何在给定范围内将数组中的数字相加?
- C++ 从指定范围内的文件中读取数组
- C++范围?将数组传递给函数时出现问题
- 无法获取数组内数组的总和
- 结构内数组的设置值
- 如何计算双打数组中特定范围内的值数量
- 打印特定范围内的数组
- C 11中类范围的数组初始化
- Seg故障是由于试图访问超出范围的数组,原因不明
- 阻止调用类内数组的默认构造函数
- 允许访问超出范围的数组下标
- 未在范围 C++ [数组] 中声明
- 我们如何让C++程序自己修复超出范围的数组索引
- 类函数内数组的长度