标题:[推荐]看起来很简单的一道题
只看楼主
linren
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2005-12-11
 问题点数:0 回复次数:4 
[推荐]看起来很简单的一道题
[bo]题目:[/bo]
假定用一维数组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]
这道题看起来很简单……
第一次写完后,虽然通过了编译……
却在运行时失败了……

很有意思的一道题……
推荐给大家……
请注意红字部分的要求……
搜索更多相关主题的帖子: 看起来 推荐 
2008-07-09 14:51
linren
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2005-12-11
得分:0 
[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]]

生活就是一个七日接着又一个七日
2008-07-09 19:24
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
没有人顶。我来顶一下!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-10 09:17
angel2213
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-10
得分:0 
初学者真的是很多编译出现问题,不知问题在哪....
2008-07-10 11:12
我是杨过
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2007-11-23
得分:0 
呵呵 ,好问题

不要幻想,因为那从来不会是真的!
2008-07-12 21:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-223236-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.423993 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved