C ++ std :: vector擦除元素0抛出异常

时间:2010-09-24 17:22:33

标签: c++ exception vector element erase

抱歉,我无法提供代码bc我没有。

我的同事(已经在公司工作了很长时间但似乎不知道他在做什么)声称他必须做一些奇怪的事情来从矢量中删除元素。他将所有元素向下移动(从他想要移除的元素开始)然后他将移除向量中的最后一个元素。听起来不错,但效率很低。标准库的std :: vector :: erase()应该能够处理这个问题。

他这样做是因为他声称在元素0上调用erase会产生随机异常。

我的问题是什么可能导致这个?我很确定这是一个线程安全问题,但还有什么可能导致它吗?

请让我知道......我是C ++的新手。

再次,抱歉无法提供代码。

谢谢, JBU

4 个答案:

答案 0 :(得分:5)

  

...在元素0上调用erase会产生随机异常。

不,不。

如果没有更多关于他实际行动的信息,那么这就是你可以期待的所有答案。

答案 1 :(得分:2)

在元素零上调用erase的唯一地方是抛出异常,这将是已经调用未定义行为的情况。最常见的是,尝试从空向量中擦除元素零。

  

听起来不错但效率很低。

不是 - 这就是erase正在做的事情。但重新实现标准库已经为你做的事情是没有意义的。

答案 2 :(得分:1)

没有代码,很难说。如果vector::size()> 0,然后擦除元素0完全有效。可能是他正在使用迭代器来擦除第0个元素,并且迭代器已经以某种方式失效。

答案 3 :(得分:0)

根据您对同事逻辑的描述,我会说您的评估是准确的。 '随机例外'='由于滥用矢量容器而未确诊的错误'。

那就是说,这个问题有点无意义 - 如果你不能提供资料来源,你怎么能得到关于错误或其他方面的明确答案?