免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lipingtababa
打印 上一主题 下一主题

[C++] 你们的代码会用引用吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-11-19 14:56 |显示全部楼层
我不是在挑战Bjarne Stroustrup. 我一个小小的应用程序员,根本就没有改造C++的心.何必一定要我拿出一个像样点的东西来呢

我只是想跟一帮和我差不多,或者差那么一点好,或者那么一点的应用程序员交流下,大家讨论讨论引用的用法,我的标题就很清楚了"你们的代码会用引用吗?",我说的可不是"你们的代码不要用引用."

至于我个人喜好指针,不喜欢引用,完全是我的自由.你没必要对着我  ,你觉得呢

论坛徽章:
0
12 [报告]
发表于 2008-11-19 15:04 |显示全部楼层
对,没错,就是我的原话,我是这么觉得的,我也是这么做的,尽量不用引用.

我这么一觉得冒犯你了么

论坛徽章:
0
13 [报告]
发表于 2008-11-19 15:05 |显示全部楼层
"死乞白赖求着我给你讲明白为什么引用比指针好用"

你确实是被一些人捧得自己不晓得名字怎么写了,你平时签名都签作"Bjarne Stroustrup"吧,大师!

论坛徽章:
0
14 [报告]
发表于 2008-11-24 01:23 |显示全部楼层
原帖由 wishel 于 2008-11-23 22:46 发表
哈哈,争论谁更肤浅就没意义了
你如果是C程序员,我没话说,我是个C++程序员,不喜欢C的很多东西
不过如果一个自称C++程序员大叫引用没用指针最好,偶是要鄙视一下的



---你真好玩,你的回帖什么信息都没提供,就引进了“肤浅”两个字,还怕我们不懂这个词的释义,现身说法展示了一下。

[ 本帖最后由 lipingtababa 于 2008-11-24 01:27 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2008-11-24 18:03 |显示全部楼层
版主快封帖,都成粪坑了

论坛徽章:
0
16 [报告]
发表于 2008-12-26 10:07 |显示全部楼层
帖子都这么长了

我前些日子碰到的关于引用的问题.

现有vector<string> reports;
要把它打包发出去,但是一次打包最多只能发5000个reports.

如果打包函数是 void pack(constant vector<string>& packeds);
那么调用代码应该是这样
vector<string> packed;
if(reports.size()<=5000)
&nbsp;&nbsp;&nbsp;&nbsp;packed.assign(reports);
else
&nbsp;&nbsp;&nbsp;&nbsp;packed.assign(reports.begin(),reports.begin()+5000);
pack(packed);

这个做法的缺陷是不论reports的大小是否大于5000,都得拷贝一份.

如果打包函数接受指针,void pack(constant vector<string>* packeds);
调用代码可以这么写

vector<string> *p;
vector<string> packed;
if(reports.size()<=5000)
{
&nbsp;&nbsp;&nbsp;&nbsp;p=&reported;
}
else
{
&nbsp;&nbsp;&nbsp;&nbsp;packed.assign(reports.begin(),reports.begin()+5000);
&nbsp;&nbsp;&nbsp;&nbsp;p=&packed;
}
pack(p);


这样可以避免无谓的拷贝.

但是考虑到vector<string> *p;的代码太怪异了,我放弃了后一种写法.

[ 本帖最后由 lipingtababa 于 2008-12-26 11:23 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2008-12-26 11:21 |显示全部楼层
我也想过两次分别调用pack,但是这样做,我觉得代码逻辑不清晰,可读性比较差.

假设,以后在调用pack()之前需要先调用sort(),decorate(),这些代码都得拷贝两分.

vector<string> packed;
if(reports.size()<=5000)
    sort(reports);
    decorate(reports);   
    pack(reports);
else {         
    packed.assign(reports.begin(),reports.begin()+5000);
    sort(packed);
    decorate(packed);   
   pack(packed);
}

论坛徽章:
0
18 [报告]
发表于 2008-12-26 11:40 |显示全部楼层
第一种肯定不行,完全不一样的逻辑.应该是先取子集再sort,这样改就成先sort再取子集了.

第二种办法,确实可以解决我提出的问题,我再想想
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP