C++热身系列一[原创于百合]

讨论了使用C++标准库中的vector容器时不同遍历方法的优劣,并探讨了如何利用迭代器和宏来高效地遍历vector。强调了size_t类型可能导致的死循环问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 13:15:45 2006)


令vect 为vector型的一个向量。现在需要遍历其全部元素,以下代码那个最好,那
个有错误,你认为是否有更好的方法?
1)
for(size_t i = 0 ; i=0; --i)
{
}
4)
for(int i = vect.size()-1 ; i>=0; --i)
{
}
--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]

[本篇全文] [回复本文] [本篇作者: ufx222] [本篇人气: 25]     1

发信人: ufx222 (不许回头), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 13:19:23 2006)

3最好
4有warning


还对?


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.29.249.31]

[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 14]     2

发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 14:13:57 2006)

中计了....3是错误的.


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]

[本篇全文] [回复本文] [本篇作者: ufx222] [本篇人气: 19]     3

发信人: ufx222 (不许回头), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 14:16:12 2006)

.........
我懂了:(
vector是个奇怪的东西


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.29.249.31]

[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 20]     4

发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 14:23:19 2006)

关键问题在于size_t是无符号型,也就是它总是大约等于0,这个循环是一个死循环.
那么能不能给出一个最好的解法,来遍历向量呢?

--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]

[本篇全文] [回复本文] [本篇作者: ufx222] [本篇人气: 23]     5

发信人: ufx222 (不许回头), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 14:32:36 2006)

我从来都是用宏的

#define VAR(a,b) __typeof(b) a=(b)
#define FOREACH(it,c) for(VAR(it,(c).begin());it!=(c).end();++it)


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.29.249.31]

[本篇全文] [回复本文] [本篇作者: ora] [本篇人气: 19]     6

发信人: ora (旧日C来·逝S流年...), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 14:36:40 2006)

__typeof?看上去不错。不过貌似是两个下划线的,编译器支持情况怎么样?
通常只会老老实实写 iterator~~



--
※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 159.226.21.63]

[本篇全文] [回复本文] [本篇作者: ufx222] [本篇人气: 20]     7

发信人: ufx222 (不许回头), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 14:39:07 2006)

是两个下划线呀……

我一直用的GCC系列的编译器,VC6这么写很麻烦,高版本的VC不知道


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.29.249.135]

[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 19]     8

发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 15:16:09 2006)



这个宏展开对性能有什么提升呢?


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]

[本篇全文] [回复本文] [本篇作者: ufx222] [本篇人气: 24]     9

发信人: ufx222 (不许回头), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 15:43:24 2006)

有。


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.29.249.135]

[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 19]     10

发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 15:50:51 2006)

指令质量有何改善?宏最大的好处就是节约函数调用开销,通过宏展开,以实际可执行程
序代码臃肿为代价,减少跳转开销,提高cache命中率。但是你这里,有何改善了,为什么
不直接写出来呢?


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]

[本篇全文] [回复本文] [本篇作者: ufx222] [本篇人气: 26]     11

发信人: ufx222 (不许回头), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 15:54:32 2006)

我指的是
对于容器的访问,尽量用iterator

至于用宏只是我写代码的风格,写代码快一点。
我为论文实现时,只用C的。只有写赛场上的程序,我才用这样风格的程序。


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.29.249.135]

[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 28]     12

发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 16:09:36 2006)

原来如此


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]

[本篇全文] [回复本文] [本篇作者: ppliu] [本篇人气: 51]     13

发信人: ppliu (世间若无两全法,宁负如来不负卿), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 19:49:04 2006)

FYI, boost has a real portable implementation of foreach, the BOOST_FOREACH, w
hich used a bunch of very clever tricks to deduce the type of the initializati
on clause.
Using __typeof is convenient, but non-portable.



--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 210.28.131.114]

[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 48]     14

发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标  题: Re: 有趣的题目,找工作的人来热热身吧
发信站: 南京大学小百合站 (Thu Nov  9 20:39:17 2006)

老鸟啊。。。。


--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 61.135.7.196]

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值