| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 356 人关注过本帖
标题:[推荐]看起来很简单的一道题
收藏  订阅  推荐  打印 
linren
Rank: 2
等级:注册会员
帖子:37
积分:552
注册:2005-12-11
[推荐]看起来很简单的一道题

题目:
假定用一维数组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所占用的空间。上机测试该函数。

题目:
这道题看起来很简单……
第一次写完后,虽然通过了编译……
却在运行时失败了……

很有意思的一道题……
推荐给大家……
请注意红字部分的要求……
搜索更多相关主题的帖子: 看起来  推荐  
2008-7-9 14:51
linren
Rank: 2
等级:注册会员
帖子:37
积分:552
注册:2005-12-11

参考答案:
#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
**************************************************************/

说明:
这样的数组只能通过指针来创建和删除……
值得注意的是,数组的大小需要用户来记住……

[ 本帖最后由 linren 于 2008-7-9 19:26 编辑 ]

生活就是一个七日接着又一个七日
2008-7-9 19:24
mqh21364
Rank: 4
等级:高级会员
帖子:638
积分:6970
注册:2008-2-28

没有人顶。我来顶一下!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-7-10 09:17
angel2213
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2008-7-10

初学者真的是很多编译出现问题,不知问题在哪....
2008-7-10 11:12
我是杨过
Rank: 2
等级:注册会员
帖子:49
积分:620
注册:2007-11-23

呵呵 ,好问题

不要幻想,因为那从来不会是真的!
2008-7-12 21:57
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.059546 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved