抱歉,我无法提供代码bc我没有。
我的同事(已经在公司工作了很长时间但似乎不知道他在做什么)声称他必须做一些奇怪的事情来从矢量中删除元素。他将所有元素向下移动(从他想要移除的元素开始)然后他将移除向量中的最后一个元素。听起来不错,但效率很低。标准库的std :: vector :: erase()应该能够处理这个问题。
他这样做是因为他声称在元素0上调用erase会产生随机异常。
我的问题是什么可能导致这个?我很确定这是一个线程安全问题,但还有什么可能导致它吗?
请让我知道......我是C ++的新手。
再次,抱歉无法提供代码。
谢谢, JBU
答案 0 :(得分:5)
...在元素0上调用erase会产生随机异常。
不,不。
如果没有更多关于他实际行动的信息,那么这就是你可以期待的所有答案。
答案 1 :(得分:2)
在元素零上调用erase
的唯一地方是抛出异常,这将是已经调用未定义行为的情况。最常见的是,尝试从空向量中擦除元素零。
听起来不错但效率很低。
不是 - 这就是erase
正在做的事情。但重新实现标准库已经为你做的事情是没有意义的。
答案 2 :(得分:1)
没有代码,很难说。如果vector::size()
> 0,然后擦除元素0完全有效。可能是他正在使用迭代器来擦除第0个元素,并且迭代器已经以某种方式失效。
答案 3 :(得分:0)
根据您对同事逻辑的描述,我会说您的评估是准确的。 '随机例外'='由于滥用矢量容器而未确诊的错误'。
那就是说,这个问题有点无意义 - 如果你不能提供资料来源,你怎么能得到关于错误或其他方面的明确答案?