在C++中如何实现动态定义数组的长度?

时间:2022-08-30 19:47:48
初学C++,在学习中碰到这么一个问题

我写了一个学习排序方法的程序,我希望每次生成N个两位数,然后选择排序方法并比较各排序方法所消耗的时间

程序如下:

//目标:此练习将成为一个基本排序的学习、比较的程序
//随机生成N个随机两位数,每行十个数,选择排序方式并比较排序的时间
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 99999
void selectionsort(int a[SIZE]);
void compexch(int *x,int *y);
void showarray(int a[SIZE]);
void insertsort(int b[SIZE]);
void exch(int *x,int *y);
void bubblesort(int b[SIZE]);
bool less(int x,int y);
void shellsort(int b[SIZE]);
void main()
{
const int MAX=99;
const int MIN=10;
int a[SIZE],counter;
int i,method;
char flg;
do
{
//先执行第一步:生成所有的数
srand(time(NULL));
cout<<"以下是生成的数组:"<<endl;
for(i=0;i<=SIZE;i++)
{
a[i]=rand()%(MAX-MIN)+(MIN+1);
cout<<a[i]<<" ";
counter++;
if(counter % 10==0)
cout<<endl;
}
//下面就是排序选择
cout<<"请选择排序的方式:"<<endl<<"目前支持1:选择排序 2:插入排序 3:冒泡排序 4:希尔排序"<<endl;
cin>>method;
//方法选择执行
switch(method)
{
case 1:selectionsort(a);
case 2:insertsort(a);
case 3:bubblesort(a);
case 4:shellsort(a);
}
//显示数组
showarray(a);

//重试开关
cout<<"是否重新进行尝试?(N/Y?)"<<endl;
cin>>flg;
}
while(flg=='Y'||flg=='y');

}

void selectionsort(int b[SIZE])
{
int i,j;
for(i=0;i<SIZE;i++)
{
for(j=i+1;j<SIZE+1;j++)
{
compexch(&b[i],&b[j]);
}
}
}

void insertsort(int b[SIZE])
{
int i,j;
for(i=1;i<SIZE;i++)
compexch(&b[0],&b[i]);
for(i=2;i<=SIZE;i++)
{
j=i;
while(b[j]<b[j-1])
{
exch(&b[j],&b[j-1]);
j--;
}
}
}

void bubblesort(int b[SIZE])
{
int i,j;
for(i=0;i<SIZE;i++)
for(j=SIZE;j>0;j--)
compexch(&b[j-1],&b[j]);
}

void shellsort(int b[SIZE])
{
int i,j,h;
for(h=1;h<=(SIZE-1)/9;h=3*h+1);
for(;h>0;h/=3)
for(i=1+h;i<=SIZE;i++)
{
int j=i;int v=b[i];
while (j>=1+h && less(v,b[j-h]))
{b[j]=b[j-h];j-=h;}
b[j]=v;
}
}

bool less(int x,int y)
{
if(x<y)
return true;
else
return false;
}


void exch(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}


void compexch(int *x,int *y)
{
int t;
if(*x>*y)
{
t=*x;
*x=*y;
*y=t;
}
}

void showarray(int a[SIZE])
{
int i,counter;
counter=0;
for(i=0;i<=SIZE;i++)
{
cout<<a[i]<<" ";
counter++;
if(counter % 10==0)
cout<<endl;
}
}


其他的都没有什么问题,就是每次都要在代码里更改SIZE的大小来改变生成的数组的大小,感觉这样很麻烦,如何在程序运行时让程序生成自己制定大小的数组?在VB里可以用Redim来实现,望高手帮帮忙~谢谢啦!!!

还有~刚刚学了两天,高手们给点学习的建议吧~比如上面的这段代码,有没有可以优化的地方呢?

7 个解决方案

#1


用new或者malloc动态分配内存.

#2


引用 1 楼 akirya 的回复:
用new或者malloc动态分配内存.


谢谢大哥~

不过似乎还没有学到这两个词。。。。
可以举个例子么?比如,改造一下我上面这个程序?
(*^__^*) 嘻嘻~谢谢~

#3


new或者malloc^_^

#4


引用 3 楼 mstlq 的回复:
new或者malloc^_^


我在图书馆借的本C++的书。。。居然没找到这两个词。。。

有没有电子版的参考资料?

谢谢哈~

#5


连new和malloc都不知道,就代表LZ没学过指针之类的东西。
建议LZ好好学学c/c++后再来考虑动态数组的问题,否则,LZ现在不能完全理解,对以后的发展无益。

希望LZ能够好好买一本好书,至少买那种代码中 不含#include <iostream.h>这样代码的书,这种书害人。等有一点基础后可以买c++ primer看。

#6


引用 5 楼 adolthor 的回复:
连new和malloc都不知道,就代表LZ没学过指针之类的东西。
 建议LZ好好学学c/c++后再来考虑动态数组的问题,否则,LZ现在不能完全理解,对以后的发展无益。

 希望LZ能够好好买一本好书,至少买那种代码中不含#include  <iostream.h>这样代码的书,这种书害人。等有一点基础后可以买c++ primer看。


一语中的。。。这就去图书馆借本新的书去~前天借的这本里全书都是#include <iostream.h>

#7


   “在C++中如何实现动态定义数组的长度?“

    看完标准C++的知识就知道了,不需要你做任何实现,一切的一切都是现成的,用vector容器就行了。

#1


用new或者malloc动态分配内存.

#2


引用 1 楼 akirya 的回复:
用new或者malloc动态分配内存.


谢谢大哥~

不过似乎还没有学到这两个词。。。。
可以举个例子么?比如,改造一下我上面这个程序?
(*^__^*) 嘻嘻~谢谢~

#3


new或者malloc^_^

#4


引用 3 楼 mstlq 的回复:
new或者malloc^_^


我在图书馆借的本C++的书。。。居然没找到这两个词。。。

有没有电子版的参考资料?

谢谢哈~

#5


连new和malloc都不知道,就代表LZ没学过指针之类的东西。
建议LZ好好学学c/c++后再来考虑动态数组的问题,否则,LZ现在不能完全理解,对以后的发展无益。

希望LZ能够好好买一本好书,至少买那种代码中 不含#include <iostream.h>这样代码的书,这种书害人。等有一点基础后可以买c++ primer看。

#6


引用 5 楼 adolthor 的回复:
连new和malloc都不知道,就代表LZ没学过指针之类的东西。
 建议LZ好好学学c/c++后再来考虑动态数组的问题,否则,LZ现在不能完全理解,对以后的发展无益。

 希望LZ能够好好买一本好书,至少买那种代码中不含#include  <iostream.h>这样代码的书,这种书害人。等有一点基础后可以买c++ primer看。


一语中的。。。这就去图书馆借本新的书去~前天借的这本里全书都是#include <iostream.h>

#7


   “在C++中如何实现动态定义数组的长度?“

    看完标准C++的知识就知道了,不需要你做任何实现,一切的一切都是现成的,用vector容器就行了。