怎么改变数组a的大小

wowowowo 2003-10-02 12:06:46
编一个函数把数组a的大小从size变成ToSize。
...全文
214 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2003-10-03
  • 打赏
  • 举报
回复
void ChangeSize1D(T *&a,int size,int ToSize){
if(size>ToSize){
cerr<<"size>ToSize"<<endl;
exit(1); // 改成 return;
}
int *b=new int[4]; // What's the 4 mean? Should be =new int[ToSize]
for(int i=0;i<size;i++){
b[i]=a[i];
}
delete []a;
a=b;
}
而且按照这个写法,原先所有指向该数组的指针全部成为野指针了。
建议先拷贝到临时数组,然后用 placement new 进行重新分配、复制。
wowowowo 2003-10-03
  • 打赏
  • 举报
回复
我写的一个函数把数组a的大小从size变成ToSize 大家帮我看看有错吗?
#include<iostream>
using namespace std;
template<class T>
void ChangeSize1D(T *&a,int size,int ToSize){
if(size>ToSize){
cerr<<"size>ToSize"<<endl;
exit(1);
}
int *b=new int[4];
for(int i=0;i<size;i++){
b[i]=a[i];
}
delete []a;
a=b;
}
void main()
{
int *a=new int[3];
a[0]=0;a[1]=1;a[2]=2;
cout<<a[0]<<a[1]<<a[2]<<endl;
ChangeSize1D(a,3,4);
a[3]=3;
cout<<a[0]<<a[1]<<a[2]<<a[3]<<endl;
delete []a;
}
Wolf0403 2003-10-03
  • 打赏
  • 举报
回复
栈上的数组是没法更改大小的
堆上的数组可以通过 placement new 来重新分配,等于在指定的位置重新分配。TC++PL 只说了 placement object ,没有提到 placement array。不过我猜测整个数组就是在原来位置被重新分配,数据没有保留。
如果没记错,C 的 ralloc 是保留原来数据的
elvahuang 2003-10-03
  • 打赏
  • 举报
回复
这样定义的数组 大小没法改了吗
int a[10];

对 这是被称为静态分配 固定了的 是不能改变的 原因是编译...
junmayang 2003-10-03
  • 打赏
  • 举报
回复
数组大小从定义开始不能变的吧
wowowowo 2003-10-03
  • 打赏
  • 举报
回复
这个呢?
#include<iostream>
using namespace std;
template<class T>
void ChangeSize1D(T *&a,int size,int ToSize){
if(size>ToSize){
cerr<<"size>ToSize"<<endl;
return;
}
T *b=new(a) T[ToSize];
a=b;
}
void main()
{
int *a=new int[3];
int *v=a;
a[0]=0;a[1]=1;a[2]=2;
cout<<a[0]<<a[1]<<a[2]<<endl;
cout<<v[0]<<v[1]<<v[2]<<endl;
ChangeSize1D(a,3,4);
a[3]=3;
cout<<a[0]<<a[1]<<a[2]<<a[3]<<endl;
cout<<v[0]<<v[1]<<v[2]<<v[3]<<endl;
}
siegf 2003-10-03
  • 打赏
  • 举报
回复
为什么不用vector 呢 不停地 push_back 不就解决了,多省心啊。
lemon520 2003-10-02
  • 打赏
  • 举报
回复
参考vector呀,多方便!
wowowowo 2003-10-02
  • 打赏
  • 举报
回复
delete [] a 适用于动态分配的数组吧
yjf7888 2003-10-02
  • 打赏
  • 举报
回复
指针可以realloc,数组可能不行哦。
darcymei 2003-10-02
  • 打赏
  • 举报
回复
dele[]a
a=new ELEM[ToSize]
wxt2301 2003-10-02
  • 打赏
  • 举报
回复
由数组的物理存储结构决定。如果你在C中直接用类似int a[2],那么就不能改变的。如果你想改变,你需要自建数据结构!看一下数据结构的书就明白了。
danielhf 2003-10-02
  • 打赏
  • 举报
回复
1, 对栈中的数组, 重新建一个tosize大小的数组,把原来的拷过来.
2, 对堆中的数组, 直接分配即可 T *a = new T[tosize];
wenjhua 2003-10-02
  • 打赏
  • 举报
回复

//
dele[]a
a=new ELEM[ToSize]

一楼的好象是错解.
我怎么试了半天还是没有成功啊
好象这个int a[10]
是不能改的吧
如果是 指针的话就行

!~~~~等待高人


  • 打赏
  • 举报
回复
你可以使用
char *array=new char[size];类似于array【size】;不过使用完了应该delete 【】array
现在你可以这样
array=realloc(array,Tosize);
最后delete 【】array;
xghost 2003-10-02
  • 打赏
  • 举报
回复
用容器类vector
wowowowo 2003-10-02
  • 打赏
  • 举报
回复
这样定义的数组 大小没法改了吗
int a[10];
wenkejiujiu 2003-10-02
  • 打赏
  • 举报
回复
在ANSI C89中如果是数组,一旦定义了数组的大小,就改边不了了
如果在c中要改变使用的数据存储大小,可以有很多方法,比如动态分配
还有在c++中就更方便了!
rockhard 2003-10-02
  • 打赏
  • 举报
回复
如果数组定义形式如:
int a[20];
想增大a所指的内存区大小基本上不可能。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧