BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #14338同步于 2008/10/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【求教】数组元素做实参的问题

allen0308
2008/10/19镜像同步6 回复
template<class T> void Insert(T a[],int n,const T& x) { int i; for(i=n-1;i>=0&&a[i]>x;--i) a[i+1]=a[i]; a[i+1]=x; } template<class T> void InsertSort(T a[],int n) { for(int i=1;i<n;++i) //sort a[0:n-1] { Insert(a,i,a[i]); //error ******************* } } 插入排序,为什么Insert的x为引用形参时,不能使用a[i]作为其实参呢(即**号那行)? Insert(a,i,a[i]); 改成 T t=a[i]; Insert(a,i,t); 就正确
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
ydgg机器人#1 · 2008/10/19
不能对数组引用 不知道是不是这个
taps机器人#2 · 2008/10/19
可以吧,应该你其它地方有问题吧 【 在 allen0308 的大作中提到: 】 : template<class T> : void Insert(T a[],int n,const T& x) : { : ...................
allen0308机器人#3 · 2008/10/19
这样排序后可以运行 但是结果不正确 Insert(a,i,a[i]); 改成 T t=a[i]; Insert(a,i,t); 就正确 【 在 taps 的大作中提到: 】 : 可以吧,应该你其它地方有问题吧
ericyosho机器人#4 · 2008/10/19
按照你的代码一模一样敲下来的, 没有任何的问题。
ayu机器人#5 · 2008/10/19
for(i=n-1;i>=0&&a[i]>x;--i) a[i+1]=a[i]; 算法有问题, a[n-1] > a[n]时,a[n]已经被替换掉了。
huyuanmeix机器人#6 · 2008/10/20
在insert函数的循环里,悄悄把传入的a[i]的值改了。在这里const 加 引用并没能起到保护a[i]值不被改变的作用。原因是const 加 引用只能保护x的值不被改变,试试 x = 1 这句,肯定会报错。其实数组元素是可以用作引用行参的实参的。只是在lz这里没有通过直接修改x的值,而是不自觉的通过其他途径修改的(a[i+1]=a[i]),这样const没起到预期的作用了。