Essential C++中的一个问题

今天在看Essential C++的时候,发现书中有个不太明智的地方,当然我所说的这个问题并非是非常的不明智,只是个人感觉而已,书还是好书,只是有时候我们不应该完全依赖书,完全用书中所提到的做法,学习应该懂得什么可以拿来用,什么不应该拿来用,什么样的做法是明智的,什么样的做法是不明智的。
如果只是一味的效仿书中的做法,那我们又能真正的学到些什么呢?
这个问题其实很小,在书中42页定义
void bubble_sort(vector<int> vec)
{
for( int ix=0;ix<vec.size();ix++)
for( int jx=ix+1;jx<vec.size();jx++)
if(vec[ix]>vec[jx])
swap(vec[ix],vec[jx]);
}
在这个函数中,关于外循环中的ix多循环了一次(关于书中的传值和传址暂不考虑,只考虑这个函数),其实改做
for(int ix=0;ix<vec.size()-1;ix++)
最终的效果是一样的,书中的做法使得外循环多循环了一次,书中的vec.size()的值是8,当ix==7的时候,相应的内循环中的jx==ix+1==8,这时内循环终止,相比让ix<vec.size()-1要多去判断一次。
个人认为修改为如下会更好一些
void bubble_sort(vector<int> vec)
{
for(unsigned int ix=0;ix<vec.size();ix++)
for(unsigned int jx=ix+1;jx<vec.size();jx++)
if(vec[ix]>vec[jx])
swap(vec[ix],vec[jx]);
}
其中在定义ix和jx时,用到unsigned,是因为直接用定义为int,在VS2005中会给出一个警告。
本人菜鸟一只,若有什么错误之处,希望各位老鸟能给出一些指点^_^ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值