我正在尝试创建许多数组,这些数组包含随机数和在1到20个元素范围之间的随机大小。我的代码适用于SOMETIMES。
我在我想要的范围之间使用一个随机数来确定数组大小。如果第一次迭代产生值为10的数组大小,比如说,那么由于某种原因,我的代码不想创建任何大于10的数组。将创建各种数组(并且这些数组的列表将被输出),直到某个迭代产生一个大于10的随机数。然后我得到这个错误:
数组索引超出范围数字 - > [11]有效数字[9]
“numbers”是数组的名称。这是我的代码的相关部分:
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;
}
答案 0 :(得分:1)
可变长度数组不是C ++标准,但仅作为某些编译器的扩展提供。我不相信他们,你在代码中也不需要这样的东西。 您可以在外部for循环外声明数组,因为您知道它的最大长度:
#define MAXL 20
int numbers[MAXL];
for ...
int length = rand() % MAXL + 1;
...
此外,如果你正在实现冒泡排序,我认为内部i循环的条件应该是i&lt;长度 - j
答案 1 :(得分:0)
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;
}
}
答案 2 :(得分:0)
正如@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];