扫码关注官方订阅号
template bool SeqList::Delsame(T x) { int i,j; for(int j=1;j
删除表中相同元素部分的代码,当表中所需删除元素只有1个的时候,运行正常.当所需删除元素有多个的时候,运行结果正确,但是会提示.exe已停止工作,所以想知道循环问题在哪??
ringa_lee
n代表的是顺序表元素个数吗?如果是的话elements[i+1]这一句会取到elements[n]的,越界了。 BTW,第一个循环为什么直接j++?如果删除了一个元素,后面的往前移了,还进行j++,那岂不是会跳过一个元素。 你试一下两个相邻的相同元素能不能删除。
elements[i+1]
elements[n]
楼上已经指出了错误,我来尝试给出一个正确的实现
int find(int lo,int hi,const T& e){ while(lo<hi--&&elem[hi]!=e); return hi;//若失败返回lo-1 } void remove(int lo,int hi){ while(hi<size) elem[lo++]=elem[hi++]; } void deduplication(){ int i=1; while(i<size){ (find(0,i,elem[i])<0)? i++:remove(i); } }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
n代表的是顺序表元素个数吗?如果是的话
elements[i+1]这一句会取到elements[n]的,越界了。BTW,第一个循环为什么直接j++?如果删除了一个元素,后面的往前移了,还进行j++,那岂不是会跳过一个元素。
你试一下两个相邻的相同元素能不能删除。
楼上已经指出了错误,我来尝试给出一个正确的实现