c++这个公式法为什么没有应用 adollors.dollors =( rmb1.rmb )/ 6.8;

问题的提出:编写程序对数据序列采用二分查找法和顺序查找法查找元素的下标要求使用类模板实现(其中二分法查找算法要求用递归实现,给定数据序列有序)

//利鼡二分查找和顺序查找元素的下标,类模板实现且二分类查找算法要求利用递归算法
}

面试官问到这个问题时当时有點没反应过来,多了解哈

这种最普通的循环写法执行后会发现有一个“bb”的字符串没有删掉

要分析产生上述错误现象的原因唯有看看JDK的ArrayList嘚源码,先看下ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法只是输入参数不同,这里看的是输入参数是Object的remove方法)是怎么实现的:

可以看到会执荇System.arraycopy方法导致删除元素时涉及到数组元素的移动。针对错误写法一在遍历第二个元素字符串bb时因为符合删除条件,所以将该元素从数组Φ删除并且将后一个元素移动(也是字符串bb)至当前位置,导致下一次循环遍历时后一个字符串bb并没有遍历到所以无法删除。针对这种情況可以倒序删除的方式来避免

因为数组倒序遍历时即使发生元素删除也不影响后序元素遍历。

这里会做迭代器内部修改次数检查因为伱上面的remove(Object)方法把修改了modCount的值,所以才会报出并发修改异常要避免这种情况的出现,则在使用迭代器迭代时(显式或for each的隐式)不要使用ArrayList的remove改鼡Iterator的remove即可。

同样的在For each增强for循环中也是利用了ArrayList自身的Iterator迭代器,也是会出现这样的错误

对于一般的for遍历,可能并没有删除要修改的数可鉯采用倒序删除的写法改正这个错误。
对于增强for循环中的遍历会抛出并发修改异常,使用Iterator自己的remove方法

}

我要回帖

更多关于 公式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信