![]() |
#2
linren2008-07-09 19:24
[bo]参考答案:[/bo]
#include <iostream> using namespace std; template<class T> void ChangeSize1D(T* &a,int size,int ToSize) { if(size==ToSize) return; T* b=new T[ToSize]; if(size<ToSize) { for(int i=0;i<size;i++) b[i]=a[i]; } else { for(int i=0;i<ToSize;i++) b[i]=a[i]; } delete [] a; a=b; } int main() { int* a=new int[4]; a[0]=1; a[1]=2; a[2]=3; a[3]=4; try { ChangeSize1D(a,4,5); } catch(const char* s) { cout<<s<<endl; return 1; } a[4]='x'; cout<<"a[4]="<<a[4]<<endl; cout<<"a[3]="<<a[3]<<endl<<endl; try { ChangeSize1D(a,5,2); } catch(const char* s) { cout<<s<<endl; return 1; } cout<<"a[2]="<<a[2]<<endl; cout<<"a[1]="<<a[1]<<endl<<endl; return 0; } /************************************************************** 运行结果: a[4]=120 a[3]=4 a[2]=-33686019 a[1]=2 Press any key to continue **************************************************************/ [bo]说明:[/bo] 这样的数组只能通过指针来创建和删除 ![]() 值得注意的是,数组的大小需要用户来记住 ![]() [[it] 本帖最后由 linren 于 2008-7-9 19:26 编辑 [/it]] |
假定用一维数组a [ 0:s i z e - 1 ]来存储一组元素。如果有n个元素,可以把它们存储在a [ 0 ] , . . . , a [ n - 1 ]中。当n超过s i z e时,数组将不足以存储所有元素,必须分配一个更大的数组。类似地,如果元素的数目比s i z e小很多,我们又可能希望减少数组的大小,以便释放出多余的空间为其他地方所用。试编写一个模板函数C h a n g e S i z e 1 D把数组a的大小从s i z e变成To S i z e。函数首先应该分配一个新的、大小为To S i z e的数组,然后把原数组a中的n个元素复制到新数组a中,最后释放原数组a所占用的空间。上机测试该函数。
[bo]题目:[/bo]
这道题看起来很简单……
第一次写完后,虽然通过了编译……
却在运行时失败了

很有意思的一道题……
推荐给大家

请注意红字部分的要求
